📝 문제
🔑 풀이 과정
10815번 숫자 카드 문제랑 다른 조건은 다 똑같고, 이 문제는 같은 카드를 입력 받을 수 있다는 것, 카드의 개수를 출력해야 한다는 점이 다른 것.
10815번 문제는 정렬 + 이분 탐색을 사용해서 존재 여부를 출력했다.
이번 10816번 문제는 Map에 key를 숫자 카드에 적힌 정수, value를 숫자 카드의 개수로 담아서 해결했다.
· 처음 상근이가 가지고 있는 숫자 카드들을 입력 받을 때
Map이 입력받은 숫자를 key로 가지고 있지 않으면 처음 입력 한다는 것 → put(숫자, 1) 을 넣어주자. (1개 있다는 뜻)
Map이 입력받은 숫자를 key로 가지고 있다면 이미 숫자카드를 가지고 있다는 것. 개수를 추가해 주어야 한다. → replace(숫자, 기존 value + 1)
· 몇 개 가지고 있는지 숫자 카드인지 입력 받을 때
Map이 입력받은 숫자를 key로 가지고 있다면 key에 매칭되는 value 출력
Map이 입력받은 숫자를 key로 가지고 있지 않다면 0 출력
🔓 답안
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
Map<Integer, Integer> map = new HashMap<>();
//숫자 카드 N개 입력 받기
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
int item = Integer.parseInt(st.nextToken());
if(!map.containsKey(item)) //map에 숫자카드가 처음 등록될 때
map.put(item, 1);
else if(map.containsKey(item)) //map에 숫자카드가 이미 있을 때
map.replace(item, map.get(item) + 1);
}
//M개의 숫자 카드 입력받고, 개수 출력하기
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < M; i++){
int item = Integer.parseInt(st.nextToken());
if(map.containsKey(item)) //map에 입력된 숫자카드가 있으면 개수 출력
bw.write(map.get(item) + " ");
else if(!map.containsKey(item)) //map에 입력된 숫자카드가 없으면 0 출력
bw.write("0 ");
}
bw.flush();
bw.close();
}
}
🖤 알고리즘 분류
- 자료 구조
- 정렬
- 이분 탐색
- 해시를 사용한 집합과 맵
'PS > Baekjoon' 카테고리의 다른 글
[Baekjoon] 18110 - solved.ac (0) | 2023.06.13 |
---|---|
[Baekjoon] 1676 - 팩토리얼 0의 개수 (0) | 2023.06.12 |
[Baekjoon] 10845 - 큐 (0) | 2023.06.10 |
[Baekjoon] 10815 - 숫자 카드 (2) | 2023.06.09 |
[Baekjoon] 10162 - 전자레인지 (0) | 2023.06.08 |
댓글