[파이썬/python] 프로그래머스 : 완주하지 못한 선수 (Lv.1)

# participant = ["mislav", "stanko", "mislav", "ana"]
# completion = ["stanko", "ana", "mislav"]

def solution(participant,completion):
    d = {}
    for x in participant:
        d[x] = d.get(x, 0) + 1
    for x in completion:
        d[x] -= 1
    answer = [i for i,j in d.items() if j > 0]
    return answer[0]
    # >> "mislav"

해시맵을 이용하여 풀이하는 것이 제일 시간복잡도가 작다.

정렬(sort)을 이용해서 서로의 인덱스 값을 비교하는 방법으로 풀었었는데 이렇게 풀면 풀리기는 하지만 시간복잡도가 매우 크다.

 

 

# participant = ["mislav", "stanko", "mislav", "ana"]
# completion = ["stanko", "ana", "mislav"]

def solution(participant,completion):
    d = {}
    for x in participant:
        d[x] = d.get(x, 0) + 1   x가 dic에 없으면 0+1, 있으면 원래 값에서 +1

(get()은 key에 대응되는 value값을 얻기 위해 사용하는 함수, 만약 찾으려는 값이 없는 경우 다른 값을 가져오게 하고 싶으면 get(x, '디폴트 값') 형식으로 적어주면 된다. 따라서 d[x] = d의 x의 value값에서 +1, key값이 존재하지 않으면 x: 0+1. )


    for x in completion:
        d[x] -= 1   x의 값에 -1, 그러면 최종적으로 완주하지 못한 선수만 값이 1이 될 것이다.
    answer = [i for i,j in d.items() if j > 0]   items()는 딕셔너리의 key와 value값들을 반환한다. 따라서 만약 j(value)가 0보다 크면 완주하지 못한 선수이므로 이 값만 리스트에 반환한다.
    return answer[0]
    # >> "mislav"

 

comment