본문 바로가기
백준

[백준] 10546번 : 배부른 마라토너 – JAVA [자바]

by Hongwoo 2022. 4. 28.
반응형

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

 

10546번: 배부른 마라토너

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 10546번 배부른 마라토너는 실버 4 난이도의 맵을 이용한 문제이다. 이 문제에서는 n명의 마라토너의 이름들이 주어지고 그다음 n - 1줄에는 완주한 마라토너의 이름들이 주어진다. 이때 완주하지 못한 마라토너의 이름을 출력해주면 된다.

 

이 문제는 해시 맵을 이용 해서 간단히 풀 수 있다. 우선 해시 맵 map을 선언하는데 키는 이름을 저장할 거 이므로 String형, 그리고 값으로는 이 이름의 사람이 몇 명인지를 저장할 거 이므로 Integer형으로 선언한다. 이 문제에서는 동명이인도 있을 수 있다. 따라서 값을 그냥 1로만 하는 게 아니라 이미 map에 마라토너의 이름이 있으면 값을 1씩 증가시켜주어야 한다.

 

우선 n명의 마라토너의 이름이 주어지면 맵에 먼저 있는지 없는지를 확인한다. 없으면 키는 마라토너의 이름, 값은 1로 맵에 추가해주고 만약에 맵에 이미 있으면 값을 1 더한 값으로 추가한다.

 

그리고 n - 1 명의 완주한 마라토너의 이름들이 주어진다. 이때 맵에 저장되어 있는 마라토너의 값이 1이면 맵에서 지워준다. 만약에 값이 2 이상이면 1을 빼준 값으로 업데이트시켜 준다. 이거를 반복하면 맵에는 단 1명만이 남아있을 것이다. 그 마라토너의 이름만 출력해주면 된다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<String, Integer> map = new HashMap<>(n);
        for (int i = 0; i < n; i++) {
            String s = br.readLine();
            map.put(s, map.getOrDefault(s, 0) + 1);
        }
        for (int i = 1; i < n; i++) {
            String s = br.readLine();
            if (map.get(s) == 1) {
                map.remove(s);
            } else {
                map.put(s, map.get(s)-1);
            }
        }
        for (String s : map.keySet()) {
            System.out.print(s);
        }
    }
}

 


  • 후기

해시 맵을 이용 하면 수월하게 풀 수 있는 문제였던 거 같다.

 

반응형

댓글