[프로그래머스] Python 달리기 경주 Level1 - 연습문제

swb·2024년 1월 18일

프로그래머스

목록 보기
6/23

문제 바로가기

처음 시도

  1. for 문을 돌려서 불린 선수를 remove하고
  2. 불린 선수 앞 쪽에 insert 하면 되지 않을까?
    -> 결과 : 시간 초과

접근 방법

  1. 순위표를 2개 만든다.
  2. 스왑한다.

player표
mumu 0
soe 1
poe 2
kai 3
mine 4

ranking표
0 mumu
1 soe
2 poe
3 kai
4 mine

여기서 kai가 불리면
player표에서
kai의 등수에 -1
kai보다 높은 등수에 +1
raking표에서
kai보다 높은 등수에 kai를 넣고
kai 등수에는 kai보다 높은 등수를 넣는다

player표
mumu 0
soe 1
poe 3
kai 2
mine 4

ranking표
0 mumu
1 soe
2 kai
3 poe
4 mine

코드

def solution(players, callings):
    player_dict = {play : rank for rank, play in enumerate(players)}
    rank_dict = {rank : play for rank, play in enumerate(players)}

    for c in callings:
        rank = player_dict[c]

        player_dict[rank_dict[rank-1]], player_dict[rank_dict[rank]] = player_dict[rank_dict[rank]], player_dict[rank_dict[rank-1]]
        rank_dict[rank-1], rank_dict[rank] = rank_dict[rank], rank_dict[rank-1]

    return list(rank_dict.values())
profile
개발 시작

0개의 댓글