본문 바로가기
Problem Solving/Baekjoon

[백준] 10546 배부른 마라토너 - Data Structure / Java

by graycode 2023. 3. 18.

 문제 링크

 

10546번: 배부른 마라토너

마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명

www.acmicpc.net

 

 풀이 과정

참가자 중 동명이인이 있을 수 있다는 조건에 의해 set이 아닌 map을 활용한다.

 

각 참가자의 이름을 key로 map에 저장하되, 동명이인이라면 value를 증가시켜 처리한다.

완주자의 이름을 입력받고 해당 완주자가 map에 존재한다면 해당 value를 감소시키고,

만약 value가 0이라면 해당 이름의 참가자는 모두 완주를 했으므로 map에서 제거한다.

 

위의 과정을 거쳐 map에 잔존하는 1개의 이름을 정답으로써 출력한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String input = br.readLine();
            map.put(input, map.getOrDefault(input, 0) + 1);
        }

        while (n-- > 1) {
            String input = br.readLine();
            map.put(input, map.get(input) - 1);

            if (map.get(input) == 0)
                map.remove(input);
        }

        bw.write(String.valueOf(map.keySet().iterator().next()));
        bw.flush();
    }

}

댓글