Algorithm/Python
[홀로 하는 코딩 공부] 달리기 경주(Python)
s5unnyjjj
2024. 5. 13. 22:00
프로그래머스
사용 언어: Python
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
*** 본 문제를 푸는 과정을 공유하려 한다.
▶ 처음에 본 문제를 보고 단순하게 아래와 같이 코드를 작성하였다.
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
▶ 성공이다!!
>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.
>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.
>> 긴 글 읽어주셔서 감사합니다.
반응형