<문제출처>
https://school.programmers.co.kr/learn/courses/30/lessons/178871
<고민 끄적끄적>
dict() 테이블에 {이름 : 등수}의 형태로 데이터를 보관한다.
해설진이 부른 이름 callings를 순회하면서 등수가 바뀔 때마다 players배열에서 위치를 바꿔준다.
그리고 dict() 테이블의 이름과 등수도 새롭게 갱신해준다.
전체적으로 callings(≤ 1,000,000)를 한번만 순회하므로 시간복잡도는 O(N)이다.
최종코드
def solution(players, callings):
# {이름 : 등수}
d = dict()
for i in range(len(players)):
d[players[i]] = i
for call in callings:
# call 의 현재 등수 f
f = d[call]
# 두명의 자리를 바꾼다.
players[f], players[f - 1] = players[f - 1], players[f]
# 등수도 바꿔준다.
d[players[f]], d[players[f - 1]] = d[players[f - 1]], d[players[f]]
return players
-> 해시방식으로 기록할때는 문제는 어렵지않은데, 풀이 과정중에 헷갈릴 수 있으니, 어떤 자료를 보관하고 어떤자료를 갱신해야하는지 잘 체크해줘야한다. 풀이할 때는 주석을 적극 활용하자.
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 연습문제(LV1) : 추억 점수 (0) | 2023.10.28 |
---|---|
[프로그래머스] 연습문제(LV2) : 연속된 부분 수열의 합 (0) | 2023.10.28 |
[프로그래머스] 연습문제(LV2) : 두 원 사이의 정수 쌍 (0) | 2023.10.28 |
[프로그래머스-파이썬] 연습문제(LV2) : 괄호 변환 (0) | 2023.03.13 |
[프로그래머스-파이썬] 연습문제(LV2) : 문자열 압축 (0) | 2023.03.13 |