천리길도 한걸음부터

Day2. 숫자 카드2 본문

20일 1일 1코테

Day2. 숫자 카드2

밤연양갱 2025. 5. 1. 01:42

백준 링크

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

 

기술 요소 설명

  • HashMap  → 숫자별 개수를 카운트
  • getOrDefault → key가 없을 때 0으로 처리
  • BufferedReader, StringTokenizer → 빠른 입력
  • StringBuilder → 빠른 출력

 

풀이

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

class Day2 {
    public static void main(String[] args) throws IOException {
        // 1. 입력 받기 위한 준비
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 2. 상근이가 가지고 있는 카드 수
        int N = Integer.parseInt(br.readLine());

        // 3. 공백으로 구분된 상근이 카드의 숫자 한줄 입력받기
        StringTokenizer st = new StringTokenizer(br.readLine());

        // 4. 비교할 카드 수
        int M = Integer.parseInt(br.readLine());

        // 5. 비교할 카드 숫자 한줄 입력받기
        StringTokenizer st2 = new StringTokenizer(br.readLine());

        // 6. 비교해서 일치하는 저장용 해시맵
        Map<Integer, Integer> map = new HashMap<>();

        // 7. 상근이 카드 숫자 저장
        for (int i=0 ;i<N; i++) {
            int num = Integer.parseInt(st.nextToken());
            map.put(num, map.getOrDefault(num, 0) +1); // num은 숫자 카드의 실제 값 -> key
            // 그리고, 처음엔 map 비어있으므로, 상근이 카드 숫자 넣어줌
        }

        // 출력
        StringBuilder sb = new StringBuilder();

        // 8. 숫자 카운트 조회
        for (int i=0; i<M; i++) {
            int target = Integer.parseInt(st2.nextToken());
            sb.append(map.getOrDefault(target, 0)).append(" "); // 상근이 카드 숫자랑 비교할 카드 숫자랑 같은지 비교
        }
        System.out.println(sb);
    }
}

'20일 1일 1코테' 카테고리의 다른 글

Day3. 단어 정렬  (0) 2025.05.03
Day1. 숫자 정렬 문제  (0) 2025.05.01