숫자 카드 2

곽지욱·2024년 2월 27일

BOJ

목록 보기
47/69

10816번 : 숫자 카드2

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

public class Number_Card2 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        /*
         *  HashMap<Key, Value>
         *  Key = 입력되는 원소
         *  Value = 원소의 개수(=중복 입력 된 원소의 수)
         */

        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();


        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        for(int i =0; i<N; i++){
            int key = Integer.parseInt(st.nextToken());

            /*
             * getOrDefault(key, defaultValue)
             * key에 대해 map에 저장 된 value를 반환한다.
             * 만약 value가 없을 경우 defaultValue값을 반환한다.
             */

            map.put(key,map.getOrDefault(key,0)+ 1);


        }

        int M = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();

        st = new StringTokenizer(br.readLine(), " ");

        for (int i = 0; i<M; i++){
            int key = Integer.parseInt(st.nextToken());

            sb.append(map.getOrDefault(key,0)).append(' ');
        }

        System.out.println(sb);

    }
}
  1. HashMap 을 사용해서 각 숫자 카드의 개수를 저장할 준비

  2. 첫 번째로 숫자 카드의 개수를 입력받음 = N

  3. 공백을 기준으로 숫자들 분리

  4. 각 숫자를 읽어 들이면서 map에 해당 숫자가 있는지 확인, map.put(key, map.getOrDefault(key, 0) + 1)를 사용하여 key에 해당하는 값을 map에 저장한다 만약 key 가 이미 map 에 존재한다면 해당 값에 1을 더하고 존재하지 않으면 0에 1을 더한 값을 저장한다.

5.다음으로 주어진 숫자들의 개수를 다시 입력받음 = M

  1. 마찬가지로 공백을 기준으로 숫자 분리

  2. 각 숫자를 읽어들이면서 해당 숫자가 'map'에 저장되어 있는지 확인하고 있으면 그 값을 sb에 추가한다

결론

  • 즉 첫 번째 집합을 입력할 때 부터 getOrDefault를 이용해서 등장 횟수를 카운트하고 다음 반복문에서 해당 key에 해당 하는 value(값)을 sb에 저장 후 출력한다.

  • 이 문제는 두번째 집합의 숫자 카드가 첫 번째 집합에서 몇 번 존재하는지 확인하는 것.

0개의 댓글