본문 바로가기

문제풀기/백준 문제풀이

[알고리즘] 해시 문제 풀이(백준 10816번, 1764번)

728x90
반응형

1. 숫자 카드2(백준 10816번)

 

10816번: 숫자 카드 2 (acmicpc.net)

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

▷ 풀이 코드

import java.util.HashMap;
import java.util.Scanner;

public class NumberCard2 {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		HashMap<Integer,Integer> map = new HashMap<>();//new에서 타입 파라미터 생략가능

		int N = sc.nextInt();
		
		for(int i=0; i<N; i++) {
			int key = sc.nextInt();
            
			map.put(key, map.getOrDefault(key, 0) + 1);		
		}		
		
		int M = sc.nextInt();
		
		StringBuilder sb = new StringBuilder();
		
		for(int i=0; i<M; i++) {
			int key = sc.nextInt();
			
			sb.append(map.getOrDefault(key, 0)).append(' ');
		}	
				
		System.out.println(sb);
		
	}
}

 

 

 

 

2. 듣보잡(백준 1764번)

 

1764번: 듣보잡 (acmicpc.net)

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

▷ 풀이 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class NumberCard2 {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		HashMap<String,Integer> map = new HashMap<>();//new에서 타입 파라미터 생략가능
		HashMap<String,Integer> map1 = new HashMap<>();//new에서 타입 파라미터 생략가능

		int N = sc.nextInt();
		int M = sc.nextInt();
		
		for(int i=0; i<N+M; i++) {
			String key = sc.next();

			map.put(key, map.getOrDefault(key, 0) + 1);		
		}		
				
		StringBuilder sb = new StringBuilder();
		int cnt = 0;
		List<String> result = new ArrayList<>();
		
				
		for(String key : map.keySet()) {		
			if(map.get(key) > 1) {
				cnt++;
				result.add(key);
			}
		}
		
		System.out.println(cnt);
		
		Collections.sort(result);
		
		for(String key : result) {		
			System.out.println(key);
		}		
		
	}
}

 

 

이번에는 알고리즘 스터디를 통해 배운 해시법을 통해 백준 문제 풀이를 해보았습니다!!

 

해시는 리스트와 비슷하지만 key와 value를 입력해야한다는 점에서 차이점이 있고

key와 value가 같으면 중복된 값이 적용이 안됩니다!

그래서 getOrDefault, keySet 등의 함수를 사용하면서 값들을 증가시켜줍니다!

 

해시의 내장함수들을 잘 사용하면 코드가 훨씬 쉽고 간결해지네요!

 

다른 문제들도 풀어볼게요~

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

 

 

728x90
반응형