본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(연습문제): 달리기 경주

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 정답 변수 answer 선언후 players배열로 저장합니다.

 

2. key를 선수명, index를 value로 저장할 name_idx_dict선언 후 빈 객체로 초기화합니다.

📔 풀이과정

1. players에 대해 for loop를 수행하며 name_idx_dict값을 저장합니다.

 

2. callings에 대해 loop를 수행하며 다음을 진행합니다.

  2-1. O(1)로 선수 이름에 해당하는 index 값을 가져와 cur_idx에 저장합니다.

  2-2. name_idx_dict를 선수들의 배열 index에 맞춰 바꿔줍니다.

  2-3. cur_idx에 해당하는 선수와 cur_idx - 1에 해당하는 선수의 자리를 바꿔줍니다.

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

def solution(players, callings):
    answer = players
    name_idx_dict = {}
    for i in range(len(players)):
        p = players[i]
        name_idx_dict[p] = i
    for c in callings:
        cur_idx = name_idx_dict.get(c)
        name_idx_dict[answer[cur_idx]] = cur_idx - 1
        name_idx_dict[answer[cur_idx-1]] = cur_idx
        answer[cur_idx-1], answer[cur_idx] = answer[cur_idx], answer[cur_idx-1]
    return answer

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.