https://www.acmicpc.net/problem/10816
- 예제 입력1
10
6 3 2 10 10 10 -10 -10 7 3
8
10 9 -5 2 3 4 5 -10
- 예제 출력1
3 0 0 1 2 0 0 2
- 문제 접근
- 이전 숫자 카드(10815번) 문제와 조건은 동일
- 출력 ⇒ 4번째 줄에 주어진 숫자 카드를 보유하고 있으면 몇 개인지까지 출력
- 문제 해결
- Map 문제로 풀면 간단할 것으로 예상
- 정렬은 굳이 하지 않아도 될 것 같으니 TreeMap은 필요 없음
- 기존 풀이
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Map<Integer, Integer> myCards = new HashMap<>();
int N = Integer.parseInt(br.readLine());
int[] input = Arrays.stream((br.readLine().split(" "))).mapToInt(Integer::parseInt).toArray();
for(int i = 0; i < N; i++){
int key = input[i];
// 기존에 존재하면 해당 값 + 1 저장, 존재하지 않으면 1
myCards.put(key, myCards.getOrDefault(key, 0) + 1);
}
int M = Integer.parseInt(br.readLine());
input = Arrays.stream((br.readLine().split(" "))).mapToInt(Integer::parseInt).toArray();
for(int i = 0; i < M; i++){
int key = input[i];
// 기존에 존재하면 해당 값, 존재하지 않으면 0 StringBuilder에 추가
sb.append(myCards.getOrDefault(key, 0)).append(" ");
}
System.out.println(sb.toString().trim());
}
- Stream 풀이
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
br.readLine();
Map<Integer, Integer> myCards = Arrays.stream((br.readLine().split(" ")))
.map(Integer::parseInt)
.collect(Collectors.toMap(key -> key, value -> 1, Integer::sum));
br.readLine();
Arrays.stream(Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray())
.mapToObj(i -> myCards.getOrDefault(i, 0))
.forEach(res -> sb.append(res).append(" "));
System.out.println(sb.toString().trim());
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] N과 M 1 [15649번] (0) | 2024.07.21 |
---|---|
[Java] 덱 [10866번] (0) | 2024.07.21 |
[Java] 숫자 카드 [10815번] (0) | 2024.07.20 |
[Java] 가희와 키워드 [22233번] (0) | 2024.07.20 |
[Java] 인사성 밝은 곰곰이 [25192번] (0) | 2024.07.20 |