[프로그래머스 | 해시] 완주하지 못한 선수 - Python

·2022년 1월 6일
0
post-custom-banner

Set로 풀기

def solution(participant, completion):
    participant_set = set(participant)
    complete_set = set(completion)
    fail = participant_set - complete_set
    answer = list(fail)[0]
    return answer

동명이인인 사람들 중 한명이 fail인 경우 문제 해결 불가

Dict로 풀기

def solution(participant, completion):
    participant_set = set(participant)
    complete_set = set(completion)
    fail = participant_set - complete_set
    # fail한 사람이 동명이인이 아님
    if len(fail) != 0:
        answer = list(fail)[0]
    # fail한 사람이 동명이인이 있음
    else:
        participant_dict = {}
        # dict에 이름:개수 저장
        for name in participant_set:
            participant_dict[name] = participant.count(name)
        print(participant_dict)
        # dict에서 complete한 사람 빼기
        for complete in completion:
            participant_dict[complete] -= 1
        values = list(participant_dict.values())
        idx = values.index(1)
        answer = list(participant_dict.keys())[idx]

당연히 시간 초과

🏆 List Sort로 풀기

def solution(participant, completion):
    answer = ""
    p = sorted(participant)
    c = sorted(completion)
    for a, b in zip(p, c):
        if a != b:
            answer = a
            break
    if answer == "":
        answer = p[-1]
    return answer

naive한 접근법이 때로는 최적의 경로인 것..ㅎㅎ

profile
튼튼
post-custom-banner

0개의 댓글