본문 바로가기

알고리즘/🥈 실버

백준 1764 듣보잡 자바 풀이

728x90

난이도 : 실버4

풀이일 : 2401136

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

 

1764번: 듣보잡

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

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N, M;
		int num = 0;
		HashSet<String> people = new HashSet<>(); 
		ArrayList<String> result = new ArrayList<>();
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		for (int i = 0; i < N; i++) {
			people.add(br.readLine());
		}
		
		for (int i = 0; i < M; i++) {
			String person = br.readLine();
			if (people.contains(person)) {
				num ++;
				result.add(person);
			}
		}
		
		Collections.sort(result);
		System.out.println(num);
		
		for (int i = 0; i < num; i++) {
			System.out.println(result.get(i));
		}
	}
}

풀이

  • 듣도 못한 사람, 보도 못한 사람의 수를 입력 받기
  • 듣도 못한 사람의 수 동안 반복하며 주어지는 모든 이름을 hashset에 추가
  • 보도 못한 사람의 수 동안 반복하며 주어지는 이름 중 hashset에 들어있는 이름을 탐색
    • 탐색 중 hashset에 들어있는 이름을 발견했다면 num 숫자 올리고 ArrayList에 해당 이름 추가
    • 정렬 기능을 사용하기 위해 ArrayList를 사용
  • ArrayList 정렬 후 num 수만큼 ArrayList 속 이름 출력

배운것

  • HashSet은 직접 정렬을 할 수 없음
  • hashset.contains() : hastset 안에 괄호안의 요소가 있는지 검사
  • Collections.sort(ArrayList) : arraylist 정렬
  • arraylist.get(index) : arraylist의 index 요소 찾기

느낀점

  • 예전에 파이썬으로 둘다 리스트에 넣고 뽑을 때 틀렸던 문젠데, 왜 시간초과가 났는지 알겠다. 예전에 틀렸던 문제들을 이렇게 풀어봐도 괜찮을 것 같다는 생각이 들었다.
  • 자바 자료형에 조금 더 익숙해지고 있는 기분이 들어서, 파이썬으로 알고리즘을 풀 때 왜 그렇게 그래프 문제만 잘 풀리고 다른 것들을 잘 풀지 못했는지 생각해보게 되었다.
  • 자료형 같은 기초 부분이 탄탄하게 되어 있어야 결국 적절하게 써먹을 수 있을 텐데, 틈틈이 자주 기초도 봐야지.