[ python level 1 ] 완주하지 못한 선수

안영우·2021년 3월 26일
0

[ 프로그래머스 ]

목록 보기
3/10
post-thumbnail

📌 완주하지 못한 선수

count를 이용해서 풀려고 했지만, 정확도가 100% 나오지 않아 완벽하게 풀지 못했다.


4가지 풀이 방법이 있다.

  1. Counter
  2. Hash
  3. range(len())
  4. zip()

첫번째로 Counter 모듈을 선언해서 풀 수 있는데, Counter끼리는 더하거나 뺄 수 있다. 이번문제를 풀면서 처음 보는데 되게 유용한것 같다.
단 1줄로 답을 제출 할 수 있다 (WOW)

# Counter
from collections import Counter
def solution(participant, completion):
    return str(*(Counter(participant) - Counter(completion)))

두번째로 Hash값을 이용하자.
제한사항에 completion의 길이는 participant의 길이보다 1 작습니다.처럼, 출력값이 무조건 1개가 나오기때문에 temphash값을 누적해주고, participant hash값을 빼주면 결과적으로 남는 hash값에 키를 붙여주면 누군지 알 수 있다.

# Hash
def solution(participant, completion):
    hash_dic = {}
    temp = 0

    for part in participant:
        hash_dic[hash(part)] = part
        temp += hash(part)

    for com in completion:
        temp -= hash(com)

    return hash_dic[temp]

세번째와 네번째는 푸는 방법이 비슷한데, 정렬해서 index를 하나씩 비교하다 서로 다른 값이면 출력, 끝까지 돌았는데도 다른 값을 찾지 못했다면 participant[-1]을 출력하는 방법이다.

# range(len())
def solution(participant, completion):
    participant.sort()
    completion.sort()

    for i in range(len(participant) -1):
        if participant[i] != completion[i]:
            return participant[i]
    return participant[-1]
profile
YW_Tech

0개의 댓글