algorithm/프로그래머스

[프로그래머스] 연습문제(LV1) : 달리기 경주

Don't stop 훈 2023. 10. 28. 15:21

<문제출처>

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

<고민 끄적끄적>

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

-> 해시방식으로 기록할때는 문제는 어렵지않은데, 풀이 과정중에 헷갈릴 수 있으니, 어떤 자료를 보관하고 어떤자료를 갱신해야하는지 잘 체크해줘야한다. 풀이할 때는 주석을 적극 활용하자.