백준

백준 10816 숫자 카드 2(Java)

Park DJ 2023. 1. 25. 19:41

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제를 풀 때 배열과 for 문을 통해서도 답을 구할 수 있지만 시간초과가 발생합니다. 따라서 HashMap을 통해 카드번호를 key값으로 담고 갯수를 value로 담아서 key값이 있다면 value를, 없다면 0을 StringBuilder에  더해서 출력하면 됩니다.

 


 

Java 코드

 


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

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>();

    int n = sc.nextInt();
    
    for(int i = 0; i < n; i++) {
      int a = sc.nextInt();
      if(map.containsKey(a)) map.put(a, map.get(a) + 1);
      else map.put(a, 1);
    }

    int m = sc.nextInt();

    for(int i = 0; i < m; i++) {
      int b = sc.nextInt();
      if(map.containsKey(b)) sb.append(map.get(b)+" ");
      else sb.append(0+" ");
    }

    System.out.println(sb);
  }
}