숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.
O(N*M))은 시간 복잡도상 명백한 시간 초과가 예상되었다.HashMap이 가장 적합한 자료구조라고 생각했다.HashMap 사용 시: O(N) (카드 정리) + O(M) (카드 탐색) = O(N + M)
O(N * M)
HashMap 사용 시: 상근이가 가진 카드 중 고유한 숫자의 개수(K)만큼 HashMap에 데이터가 저장되므로 공간 복잡도는 O(K).O(1).HashMap을 사용하는 것이 정답이라고 확신했다.HashMap<Integer, Integer> 타입의 map을 생성한다. Key는 숫자 카드의 숫자, Value는 해당 카드의 개수를 저장한다.BufferedReader와 StringTokenizer를 사용해 N개의 숫자 카드를 효율적으로 입력받는다.for 반복문을 N번 실행하면서, 각 숫자 카드(card)를 map.getOrDefault(card, 0) + 1 로직을 사용해 map에 빈도수를 기록한다.BufferedReader로 M을 입력받는다.StringBuilder를 생성한다.StringTokenizer를 사용해 M개의 찾고자 하는 숫자들을 입력받는다.for 반복문을 M번 실행하면서, 찾고자 하는 숫자(target)를 map에서 직접 조회(map.getOrDefault(target, 0))한다.StringBuilder에 추가하고 공백을 덧붙인다.