-
[Baekjoon Online Judge] 10546번: 배부른 마라토너문제 풀이/Baekjoon Online Judge 2021. 4. 4. 14:07
10546번: 배부른 마라토너
마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명
www.acmicpc.net
요구사항
- 마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명만 빼고!
- 모두가 참가하고 싶어서 안달인데 이런 백준 마라톤 대회에 참가해 놓고 완주하지 못한 배부른 참가자 한 명은 누굴까?
입력
- 첫째 줄에는 참가자 수 N이 주어진다. (1 ≤ N ≤ 105)
- N개의 줄에는 참가자의 이름이 주어진다.
- 추가적으로 주어지는 N-1개의 줄에는 완주한 참가자의 이름이 쓰여져 있다.
- 참가자들의 이름은 길이가 1보다 크거나 같고, 20보다 작거나 같은 문자열이고, 알파벳 소문자로만 이루어져 있다.
- 참가자들 중엔 동명이인이 있을 수도 있다.
출력
- 마라톤을 완주하지 못한 참가자의 이름을 출력한다.
문제의 요구사항을 살펴보면 단 한 명을 제외하고 모든 사람이 완주했다는 것에 주목해야 한다. n명 만큼 출발한 사람을 map에 저장한다. n - 1만큼 완주한 사람을 확인하고 map value 값을 down 시킨다.
map을 사용한 이유는? 참가자들 중에 동명이인이 있을 수도 있기 때문에 일반적인 List를 사용하게 되면 동명이인이 몇명인지 알 수가 없다. 그렇기 때문에 map의 value로 동명이인의 수를 파악한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class Baekjoon10546 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bufferedReader.readLine()); Map<String, Integer> runners = new HashMap<>(); for (int i = 0; i < n; i++) { String runner = bufferedReader.readLine(); runners.put(runner, runners.getOrDefault(runner, 0) + 1); } for (int i = 0; i < n - 1; i++) { String runner = bufferedReader.readLine(); // 완주한 사람 runners.put(runner, runners.get(runner) - 1); } for (String key : runners.keySet()) { if (runners.get(key) == 1) System.out.println(key); } bufferedReader.close(); } }
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 17219번: 비밀번호 찾기 (0) 2021.04.21 [Baekjoon Online Judge] 10974번: 모든 순열 (0) 2021.04.21 [Baekjoon Online Judge] 5397번: 키로거 (0) 2021.04.04 [Baekjoon Online Judge] 10845번: 큐 (0) 2021.04.04 [Baekjoon Online Judge] 10828번: 스택 (0) 2021.03.29