본문 바로가기
백준/분할정복

백준 10816. 숫자카드2

by 29살아저씨 2021. 9. 6.
반응형

🅰 백준 10816. 숫자카드2

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

✏️ 문제 풀이

  • 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

댓글