s5unnyjjj's LOG
[홀로 하는 코딩 공부] 달리기 경주(Python) 본문
프로그래머스
사용 언어: Python
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/178871
*** 본 문제를 푸는 과정을 공유하려 한다.
▶ 처음에 본 문제를 보고 단순하게 아래와 같이 코드를 작성하였다.
def solution(players, callings):
for calling in callings:
idx = players.index(calling)
change_name = players[idx-1]
players[idx-1] = calling
players[idx] = change_name
return players
▶ callings의 최대 길이가 1,000,000인 것을 놓쳤다. 누가 봐도 시간초과가 발생할 것 같은 큰 수 이다. 작성한 코드에서 위치를 찾는 index함수를 사용한 것이 시간초과의 원인이라고 생각하여 callings에 해당하는 위치를 players에서 찾는 부분을 아래와 같이 작성하였다.
def solution(players, callings):
players_dict = {}
for i, player in enumerate(players):
players_dict[player] = i
for calling in callings:
cur_i = players_dict[calling]
players_dict[calling] = cur_i - 1
players_dict[players[cur_i - 1]] = cur_i
players[cur_i] = players[cur_i - 1]
players[cur_i - 1] = calling
return players
▶ 성공이다!!
>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.
>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.
>> 긴 글 읽어주셔서 감사합니다.
반응형
'Algorithm > Python' 카테고리의 다른 글
[홀로 하는 코딩 공부] 234. Palindrome Linked List(Python) (0) | 2024.05.18 |
---|---|
[홀로 하는 코딩 공부] 숫자 변환하기(Python) (0) | 2024.05.17 |
[홀로 하는 코딩 공부] 롤케이크 자르기(Python) (0) | 2024.05.07 |
[홀로 하는 코딩 공부] 디펜스 게임(Python) (0) | 2024.05.02 |
[홀로 하는 코딩 공부] 이모티콘 할인행사(Python) (2) | 2024.05.01 |
Comments