728x90
문제
마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명만 빼고!
모두가 참가하고 싶어서 안달인데 이런 백준 마라톤 대회에 참가해 놓고 완주하지 못한 배부른 참가자 한 명은 누굴까?
입력
첫째 줄에는 참가자 수 N이 주어진다. (1 ≤ N ≤ 105)
N개의 줄에는 참가자의 이름이 주어진다.
추가적으로 주어지는 N-1개의 줄에는 완주한 참가자의 이름이 쓰여져 있다.
참가자들의 이름은 길이가 1보다 크거나 같고, 20보다 작거나 같은 문자열이고, 알파벳 소문자로만 이루어져 있다.
참가자들 중엔 동명이인이 있을 수도 있다.
출력
마라톤을 완주하지 못한 참가자의 이름을 출력한다.
풀이
1. LinkedList + System.out.println 실패
2. LinkedList + BufferedWriter 실패
3. HashMap + BufferedWriter 성공
문제를 볼때 주어지는 이름을 연결해서 해결하는 것으로 생각해 LinkedList를 이용해 문제를 해결하려 했으나 시간초과였다. N이 주어지면 LinkedList의 경우 contains를 사용하더라도 각 입력마다 i-1번을 탐색해야 하기에 시간초과가 뜨는 것으로 판단하여 hashmap을 이용해 접근하기로 하였다. hashmap은 key값을 이용하여 value값에 집적접근하기에 탐색시간을 줄일 수 있었다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.parseInt(br.readLine());
HashMap<String, Integer> names = new HashMap<>();
String str;
for(int i=0;i<n;i++) {
str=br.readLine();
if(names.containsKey(str))
names.put(str, names.get(str)+1);
else
names.put(str, 1);
}
for(int i=0;i<n-1;i++) {
str=br.readLine();
if(names.get(str)==1)
names.remove(str);
else
names.put(str, names.get(str)-1);
}
String[] arr = names.keySet().toArray(new String[names.size()]);
bw.write(arr[0]);
bw.close();
}
}
728x90
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 20361 일우는 야바위꾼 JAVA (0) | 2022.02.14 |
---|---|
Baekjoon 1620 나는야 포켓몬 마스터 이다솜 JAVA (0) | 2022.02.14 |
Baekjoon 10158 개미 JAVA (0) | 2022.02.14 |
Baekjoon 10157 자리배정 JAVA (0) | 2022.02.13 |
Baekjoon 18108 1998년생인 내가 태국에서는 2541년생?! JAVA (0) | 2022.02.13 |
댓글