[백준] 10546번 - 배부른 마라토너 Python, Java

Tuna·2022년 2월 7일
0

Data Structure

목록 보기
34/37

문제


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

모두가 참가하고 싶어서 안달인데 이런 백준 마라톤 대회에 참가해 놓고 완주하지 못한 배부른 참가자 한 명은 누굴까?

입력


첫째 줄에는 참가자 수 N이 주어진다. (1 ≤ N ≤ 10510^5)

N개의 줄에는 참가자의 이름이 주어진다.

추가적으로 주어지는 N-1개의 줄에는 완주한 참가자의 이름이 쓰여져 있다.

참가자들의 이름은 길이가 1보다 크거나 같고, 20보다 작거나 같은 문자열이고, 알파벳 소문자로만 이루어져 있다.

참가자들 중엔 동명이인이 있을 수도 있다.

출력


마라톤을 완주하지 못한 참가자의 이름을 출력한다.

예제 입력 1


3
leo
kiki
eden
eden
kiki

예제 출력 1


leo

나머지 출력은 생략한다.

풀이


Python

import sys
input = sys.stdin.readline

n = int(input().rstrip())
a = []
for _ in range(n+n-1):
    a.append(input().rstrip())

dic = {}

for i in range(n):
    dic[a[i]] = dic.get(a[i],0)+1

for i in range(n,len(a)):
    dic[a[i]] = dic.get(a[i],0)-1

for k,v in dic.items():
    if v>0:
        print(k)

Java

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        HashMap<String,Integer> map = new HashMap<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());
        ArrayList<String> list = new ArrayList<>();
        for(int a = 0; a<(2*n-1); a++){
            list.add(br.readLine());
        }
        for(int i = 0; i<n; i++) {
            map.put(list.get(i), map.getOrDefault(list.get(i),0)+1);
        }
        for(int i = n; i<list.size(); i++) {
            map.put(list.get(i), map.getOrDefault(list.get(i),0)-1);
        }

        for(String key : map.keySet()) {
            if (map.get(key) >0) {
                sb.append(key).append("\n");
            }
        }
        System.out.print(sb);
    }
}

정리


  • 아나그램 문제와 비슷하게 python에서는 dictionary를 이용해 처음 n개에 대해서 key를 카운트 해주고 나머지 n부터 len(a)까지는 key에 해당하는 값을 1씩 빼준다.
  • java의 경우에는 HashMap을 이용해 python과 똑같은 방법으로 구현했다.
profile
BE 개발자가 되기 위해 노력하는 사람

0개의 댓글