[프로그래머스] 완주하지 못한 선수Lv.1

나의 풀이

def solution(participant, completion):
    dict_participant = {}
    for p in participant:
        dict_participant[p] = dict_participant.get(p, 0) + 1
    for c in completion:
        dict_participant[c] -= 1

    return "".join(i for i in dict_participant if dict_participant[i] != 0)
  • 사전 자료형을 사용하여 문제를 해결하였다.
  • 참여한 선수들을 사전형에 키 값으로 넣어준다. 밸류 값은 해당 참여한 선수가 키 값으로 등록되어 있지 않다면 초기 값을 0을 주고 + 1을 해준다. 이미 있는 키 값이라면 원래 가지고 있던 밸류 값에 + 1을 해준다. 이렇게 하면 중복되는 회원은 중복되는 만큼의 숫자를 밸류 값으로 가지게 된다.
  • 완주한 참가자들은 마찬가지로 참가자 이름을 키 값으로 사용하여 -1을 해준다.
  • 이렇게 하면 참여한 선수 중에서 완주한 선수들은 0의 밸류 값을 가지게 될 것이다.
  • 그렇기 때문에 사전 자료형을 돌면서 밸류 값이 0이 아닌 참가자를 찾아서 리턴해주면 된다.

다른 사람 풀이 & 느낀점

import collections

def solution(participant, completion):
     answer = collections.Counter(participant) - collections.Counter(completion)
     return " ".join(list(answer.keys()))

print(solution(["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"]))
  • collections 라이브러리에 Couter 라는 함수를 사용하여 더 간단하게 해결할 수 있었다.
  • 차집합의 개념인 듯 하다.

0개의 댓글