반응형
🅰 백준 10816. 숫자카드2
✏️ 문제 풀이
- HashMap을 이용하여 중복되는 카드의 개수를 저장해주었다.
- 그 외에는 숫자카드1과 마찬가지로 이분탐색을 하면서 재귀를 구현하여서 문제를 풀었다.
✏️ 소스코드
package divideandconquer;
import java.util.*;
import java.io.*;
/*HaseMap을 이용하여 key,value값을 저장해주었다.*/
public class Main_실버4_10816_숫자카드2 {
private static int start, middle, end;
private static StringBuilder sb = new StringBuilder();
private static HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
private static ArrayList<Integer> nArr = new ArrayList<Integer>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int input = Integer.parseInt(st.nextToken());
if (hm.containsKey(input)) {
hm.put(input, hm.get(input) + 1);
} else {
hm.put(input, 1);
nArr.add(input);
}
}
Collections.sort(nArr);
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
start = 0;
end = nArr.size() - 1;
middle = start + end / 2;
int input = Integer.parseInt(st.nextToken());
search(input);
}
System.out.println(sb);
}
private static void search(int input) {
if (start > end) {
sb.append(0+" ");
return;
}
if (nArr.get(middle) == input) {
sb.append(hm.get(input)+" ");
return;
}
if (nArr.get(middle) < input) {
start = middle + 1;
middle = (start + end) / 2;
} else {
end = middle - 1;
middle = (start + end) / 2;
}
search(input);
}
}
✅ 후기
반응형
'백준 > 분할정복' 카테고리의 다른 글
백준 2447. 별찍기 10 (0) | 2021.09.06 |
---|---|
백준 2448. 별찍기 11 (0) | 2021.09.06 |
백준 11728. 배열합치기 (0) | 2021.09.06 |
백준 1074. Z (0) | 2021.09.05 |
백준 10815. 숫자 카드 (0) | 2021.08.30 |
댓글