본문 바로가기
Algorithm/프로그래머스(Programmers)

[ 파이썬(python) ] 프로그래머스 level1 - 완주하지 못한 선수

by YWTechIT 2021. 3. 31.
728x90

📌 완주하지 못한 선수

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값을 누적해주고, 참가자 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]
반응형

댓글