Programmers

[Programmers / Python 풀이] 완주하지 못한 선수

Hoo_Dev 2023. 1. 3. 11:50
def solution(participant, completion):
    answer = ''
    dic = {}
    for i in participant:
        if i in dic:
            dic[i] += 1
        else:
            dic[i] = 1

    for j in completion:
        if j in dic:
            dic[j] -= 1


    for i, j in dic.items():
        if j == 1:
            answer = i

    return answer

효율성 따지지 않고 마구잡이로 푼 방식.. 

dictionary의 카운트 방식을 통해 마지막 남은 1명을 잡아내는 방식이다.

 

다른 사람들의 방식을 몇가지 알아보자면

 

1. 정렬을 통한 방식

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]
    return participant[len(participant)-1]

정렬을 통해 각 주자들의 순서를 통일시키고 순서대로 순회 할 때, 선수의 이름이 매칭이 안되면 그 주자를 뽑아내는 방식.

for 문을 완주자의 길이만큼만 돌기 때문에 끝까지 돌았을 때 조건문에 걸리지 않으면 주자의 마지막 사람을 return.

 

2. Counter 함수를 사용한 풀이

import collections

def solution(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

Counter함수를 이용 한 풀이. 신박했던 점은 객체간의 빼기가 가능하다는 점.

 

파이썬 모듈들에 대해 다시 공부를 해야 할 것 같다.