문제 풀이/Baekjoon Online Judge

[Baekjoon Online Judge] 10546번: 배부른 마라토너

hyeonic 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();
    }
}