알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 상근이가 가지고 있는 카드 리스트와, 추가로 주어지는 카드 리스트를 비교하여
아래 카드 리스트의 카드를 상근이가 몇 개 가지고 있는지 순서대로 출력하는 문제이다.
예시로 주어진 아래 입력값을 보자.
10 => 상근이가 가진 키드의 갯수
6 3 2 10 10 10 -10 -10 7 3 => 상근이가 가지고 있는 카드
8 => 비교해야하는 카드의 갯수
10 9 -5 2 3 4 5 -10 => 비교해야하는 카드
10 : 상근이의 카드 중 10은 3개
9 : 상근이의 카드 중 9는 0개
-5 : 상근이의 카드 중 -5는 0개
2 : 상근이의 카드 중 2는 1개
3 : 상근이의 카드 중 3은 2개
4 : 상근이의 카드 중 4는 0개
5 : 상근이의 카드 중 5는 0개
-10 : 상근이의 카드 중 -10은 2개
따라서 출력값은 3 0 0 1 2 0 0 2 가 된다.
import java.util.HashMap;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] cards = new int[N];
for(int i = 0; i < N; i++) {
cards[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
HashMap<Integer, Integer> checkList = new HashMap<>();
// 해쉬맵이 정렬되지 않기 때문에 순서를 저장하기 위해 별도 배열 생성
int[] order = new int[M];
for(int i = 0; i < M; i++) {
order[i] = Integer.parseInt(st.nextToken());
checkList.put(order[i], 0);
}
System.out.println(checkCards(cards, checkList, order));
}
public static String checkCards(int[] cards, HashMap<Integer, Integer> checkList, int[] order) {
for(int card : cards) {
if(checkList.containsKey(card)) {
checkList.put(card, checkList.get(card) + 1);
}
}
// checkList 안의 value 순서대로 뽑아서 return
StringBuilder sb = new StringBuilder();
for(int number : order) {
sb.append(checkList.get(number)).append(" ");
}
return sb.toString().trim();
}
}