본문 바로가기
[ 다먹살 ]/- Coding

[백준] 10816 숫자 카드2

by 엉망으로살기 2021. 11. 5.
반응형

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 

HashMap의 key-value 쌍을 이용해 해결할 수 있었다. 나는 풀고나서는 항상 알고리즘 분류를 확인하는 편인데 정렬이나 이분 탐색을 이용해서 풀 수도 있었던 것 같지만 해시가 제일 직관적인 방법인 것 같다.


문제 및 입출력

 


코드

import java.util.HashMap;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        
        // 상근이의 카드 n개에 대한 설정
        int n = sc.nextInt();
        
        // HashMap 사용(key : 카드의 값, value : 해당 값을 가진 카드의 개수)
        for(int i=0; i<n; i++)
        {
            int num = sc.nextInt();
            
            if(map.containsKey(num))
            {
                map.put(num, map.get(num)+1);
            }
            else
            {
                map.put(num, 1);
            }
        }
        
        // m개의 입력값과 비교 HashMap의 key를 비교
        int m = sc.nextInt();
        
        for(int i=0; i<m; i++)
        {
            int chk = sc.nextInt();
            
            if(map.containsKey(chk)) // HashMap에 있는 key면 해당 value를 출력
            {
                sb.append(map.get(chk) + " ");
            }
            else // 없는 key면 0을 출력
            {
                sb.append(0 + " ");
            }
        }
        
        System.out.println(sb.toString());
        sc.close();
    }
}

 

반응형

댓글