반응형
문제를 살펴보면 단순히 역전한 결과를 스왑(swap)하면 되지 않을까 라고 생각해서, list를 이용하여 아래와 같이 문제를 풀어보았다.
# 시간초과
def solution(players, callings):
for calls in callings:
idx = players.index(calls)
values = players.pop(idx)
players.insert(idx-1, values)
return players
def solution(players, callings):
for calls in callings:
idx = players.index(calls)
players[idx-1], players[idx] = players[idx], players[idx-1]
return players
Runtime Error를 출력하기 때문에 다른 방식으로 풀어야 한다. 그렇다면, 먼저 딕셔너리를 생성하고, 딕셔너리에 현재 랭킹을 표시한다. 그런다음, 랭킹이 역전되면 현재 선수와 앞 랭크 선수의 위치를 바꾸어 주고, 그런 다음 swap을 하면 된다. 이와 같은 방식으로 수행하면 list를 순회하면서 위치를 찾는 방식으로 진행하지 않아도 된다.
def solution(players, callings):
answers = dict({player: i for i, player in enumerate(players)})
for calls in callings:
idx = answers[calls]
answers[calls] -= 1
answers[players[idx-1]] += 1
players[idx-1], players[idx] = players[idx], players[idx-1]
return players
딕셔너리를 생성해서 idx를 찾는다면 list에서 순회하여 idx를 찾는 것보다 훨씬 빠르게 idx를 찾을 수 있다.
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사 - Python (2) | 2023.08.24 |
---|---|
[프로그래머스] 공원 산책 - Python (0) | 2023.08.24 |
[Algorithm] sort()와 sorted()의 차이점 (2) | 2022.08.18 |
[Algorithm] List, Dictionary의 시간 복잡도 (0) | 2022.08.18 |
[Python] python에서 pickle file 다루기 (0) | 2022.06.20 |