새소식

Algorithm/BOJ

(JAVA) 백준 10816번 : 숫자 카드 2

  • -
728x90

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

문제를 읽고 HashMap 과 Counting 정렬을 사용하고자 했지만 범위가 너무 넓어 HashMap 을 먼저 사용하고 Counting 을 후에 진행하여 진행했다.

 

HashMap

- 기존의 값을 확인하는 기능이 필요하여 getOrDefault 를 사용하였다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
import java.util.StringTokenizer;
import java.util.HashMap;
 
 
public class Main 
{ 
	public static void main(String[] args) throws IOException 
    {	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		/*
		 *  HashMap<Key, Value>
		 *  Key = 입력되는 원소
		 *  Value = 원소의 개수(=중복 입력 된 원소의 수) 
		 */
         
		HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
		
		int N = Integer.parseInt(br.readLine());
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		for(int i = 0; i < N; i++) 
        {
			int key = Integer.parseInt(st.nextToken());
			
			/* 
			 * getOrDefault(key, defaultValue)
			 * key에 대해 map에 저장 된 value를 반환한다.
			 * 만약 value가 없을 경우 defaultValue값을 반환한다.
			 */
             
			map.put(key, map.getOrDefault(key, 0) + 1);
		}
		
		int M = Integer.parseInt(br.readLine());
		
		StringBuilder sb = new StringBuilder();
		
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < M; i++) 
        {
			int key = Integer.parseInt(st.nextToken());
			
			sb.append(map.getOrDefault(key, 0)).append(' ');
		}
		
		System.out.println(sb);
	}
}

 

Counting

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main 
{ 
	public static void main(String[] args) throws IOException 
    {	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
        
		int[] counting = new int[20000001]; // 입력받는 수의 범위 : -10,000,000 ~ 10,000,000	
		
		int N = Integer.parseInt(br.readLine());
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		for(int i = 0 ; i < N; i++) 
        {
			counting[Integer.parseInt(st.nextToken()) + 10000000]++;	// 해당 인덱스의 값 증가
		}
		
		int M = Integer.parseInt(br.readLine());
		
		st = new StringTokenizer(br.readLine(), " ");
		
		for(int i = 0; i < M; i++) 
        {
			sb.append(counting[Integer.parseInt(st.nextToken()) + 10000000]).append(' ');
		}
        
		System.out.println(sb);
	}
}

 

해당 블로그의 글을 참조하여 작성하였습니다 : )

https://st-lab.tistory.com/267

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.