less than 1 minute read

숫자 카드 2

백준 10816번 상세보기

문제

숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.

Flow.

  • 문제를 요약하면 상근이가 각 숫자카드를 몇개 들고 있는지 출력하는 것이다.
  • 해쉬맵을 통해서 자료구조를 만든다.
  • 정수 M의 key값을 가지고 있는 value를 출력
  • Scanner를 사용하면 처리 속도가 느려 통과하지를 못한다.
    • 개인적으로 백준에서 가장 불편하게 생각하는 부분이다.
    • BufferedReader와 Writer 를 사용해서 flush

Code.

package hash;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.StringTokenizer;

public class P10816 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());

		HashMap<Integer, Integer> map = new HashMap<>();
		for (int i = 0; i < n; i++) {
			int x = Integer.parseInt(st.nextToken());
			map.put(x, map.getOrDefault(x, 0) + 1);
		}

		int m = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < m; i++) {
			int y = Integer.parseInt(st.nextToken());
			if (map.get(y) == null) {
				bw.write(0 + "\n");
			} else {
				bw.write(map.get(y) + "\n");
			}
		}
		bw.flush();
		bw.close();

	}

}

Leave a comment