매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 백준 10546 배부른 마라토너 - Python 본문

알고리즘 문제풀이/백준

[Seop's의 코드풀이] 백준 10546 배부른 마라토너 - Python

섭섭군 2020. 5. 13. 18:48
반응형

이번에 풀어볼 문제는 백준 10546번인 배부른 마라토너 라는 문제입니다.

문제는 다음과 같습니다.

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

 

10546번: 배부른 마라토너

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

www.acmicpc.net

 

본 문제에서 가장 주의깊게 살펴 봐야 하는 것은 동명이인이 존재 할 수 있다는 것 입니다.

만약 모든 사람의 이름이 다르다면 배열이나 딕셔너리에 없다면 그 이름이 정답일 것 입니다.

 

저는 동명이인 문제를 다음과 같이 해결했습니다.

 

1. 참가한 사람들의 dict를 생성하고 적재한다. 적재하는 방식은 다음과 같다.

Key : 참가자 이름

Value : 1

2. 만약 동일한 이름의 참가자가 있다면 Value 값을 1 증가시키니다.

3. 완주한 사람들 역시 참가한 사람들과 같은 방식으로 dict를 생성하고 적재한다.

4. 참가한 사람들의 key로 탐색을 진행한다.

5. 만약 완주한 사람의 dict에 key가 존재하지 않는다면 해당 key가 정답이다.

6. 만약 완주한 사람의 valued와 참가한 사람의 Value가 다르다면 해당 key가 정답니다.

 

위와 같은 방식으로 문제를 해결하였고 전체 코드는 다음과 같습니다.

질문과 피드백은 언제나 감사드립니다.

import sys
input = sys.stdin.readline

N = int(input())
# person : 참가한 사람들의 dict
# finish : 완주한 사람들의 dict
person = dict()
finish = dict()
answer = ""
for _ in range(N) :
    name = input().rstrip()
    if name in person :
        person[name] += 1
    else :
        person[name] = 1

for _ in range(N-1) :
    name = input().rstrip()
    if name in finish :
        finish[name] += 1
    else :
        finish[name] = 1


for n in person.keys() :
    #  참가자에는 있지만 완주자에는 없다면 해당 키가 정답
    if n not in finish :
        answer = n
        break
    else :
        #  참가자의 value와 완주자의 value가 다르다면 해당 키가 정답
        if person[n] != finish[n] :
            answer = n
            break
print(answer)
반응형
Comments