🔍 알고리즘/프로그래머스 Python
[Python] 프로그래머스 178871. 달리기 경주 (Lv.1)
탄치
2023. 6. 20. 22:51
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
set, map 등의 hash 자료구조를 이용해 풀이했습니다. 아주 효율적인 코드는 아니지만 시간 내에 잘 돌아갑니다.
접근 아이디어는 선수의 이름과 현재 등수가 서로를 양방향으로 지목해 바꿉니다. 어떤 선수의 이름이 불린다면, 그 선수의 등수를 알게 되고, 그 선수의 앞 등수를 알게 되어 이름을 알게되는 구조입니다.
등수와 이름을 모두 안다면 호명된 선수와 앞 선수의 순위를 바꾸어 갱신하면 됩니다.
def solution(players, callings):
n = len(players)
ranking = []
idxset = {}
for i in range(n):
ranking.append(players[i])
idxset[players[i]] = i
for c in callings:
t = idxset[c]
f = ranking[t - 1]
ranking[t - 1] = c
ranking[t] = f
idxset[c] = t - 1
idxset[f] = t
return ranking
728x90