반응형

문제 링크

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

 

풀이 )

  맵을 사용하는 기본적인 문제이다.

  숫자 카드에 들어갈 수 있는 값의 범위가 너무 넓기 때문에 범위만큼의 배열을 선언해서 개수를 기록하는 방법으로는 해결할 수 없다.

  입력받는 숫자 카드를 key값으로 하여 해당 key값이 있으면(containsKey) value를 1 올려주고 없으면 key에 1을 넣어준다.

 

  마지막으로 찾는 key 값에 대해서 key값이 있으면 value를, 없으면 0을 출력한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String[] in;

        int n = Integer.parseInt(br.readLine());
        HashMap<Integer, Integer> map = new HashMap<>();
        in = br.readLine().split(" ");
        for(int i = 0; i < n; ++i){
            int key = Integer.parseInt(in[i]);
            if(map.containsKey(key))
                map.put(key, map.get(key)+1);
            else
                map.put(key, 1);
        }

        int m = Integer.parseInt(br.readLine());
        in = br.readLine().split(" ");
        for(int i = 0; i < m; ++i){
            int key = Integer.parseInt(in[i]);
            if(map.containsKey(key))
                sb.append(map.get(key)).append(' ');
            else
                sb.append(0).append(' ');
        }
        System.out.println(sb);
    }
}
반응형

+ Recent posts