JAVA/Coding Test

[JAVA] 백준 10816 숫자 카드 2_집합과맵

오늘도개발 2023. 3. 3. 10:40

 

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

접근 :

 

- 기존에 작성한 숫자 카드 글에서 map을 사용한 방식을 응용한다.

 

- map을 입력할 때, 중복 여부를 체크하고 중복 카운트를 value로 입력한다.

 

- 조회시에는 map에 키가 있으면 value 값을 없으면 0을 출력 하도록 한다. 

 

 

https://kjwit.tistory.com/entry/JAVA-%EB%B0%B1%EC%A4%80-10815-%EC%88%AB%EC%9E%90%EC%B9%B4%EB%93%9C%EC%A7%91%ED%95%A9%EA%B3%BC%EB%A7%B5

 

[JAVA] 백준 10815 숫자카드_집합과맵

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드

kjwit.tistory.com

 

 

코드 구현 : 

 

import java.io.*;
import java.util.HashMap;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		// n 입력
		int n = Integer.parseInt(br.readLine());
		String[] inputs = br.readLine().split(" ");

		HashMap<String, Integer> numbers = new HashMap<>();

		// n 카드에 해당하는 숫자들 입력
		for (int i = 0; i < n; i++) {
			if (numbers.containsKey(inputs[i])) {
				numbers.put(inputs[i], numbers.get(inputs[i]) + 1);
			} else {
				numbers.put(inputs[i], 1);
			}
		}

		// m 입력
		int m = Integer.parseInt(br.readLine());
		inputs = br.readLine().split(" ");

		for (int j = 0; j < m; j++) {
			
			// 입력 받으 숫자에 해당하는 카드를 보유한 경우
			if (numbers.containsKey(inputs[j])) {
				sb.append(numbers.get(inputs[j])).append(" ");
			
			// 해당하는 숫자를 보유하지 않는 경우
			} else {
				sb.append(0).append(" ");
			}
		}
		System.out.println(sb);
		br.close();
	}
}