[프로그래머스/Python] 달리기 경주

PhilAI·2023년 9월 16일
0

📌 문제

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

📌 풀이

풀이 1 - (9~13번 시간초과)

  1. 호명되는 이름의 인덱스 값을 저장해둔다.
  2. 호명된 이름을 players에서 삭제한다.
  3. 저장해둔 이름의 인덱스에 1를 뺀 값이 새로운 인덱스 자리이다. 새로운 인덱스에 호명이름 넣는다.
def solution(players, callings):
    answer = []
    for c in callings:
        idx = players.index(c)
        players.remove(c)
        players.insert(idx-1,c)
    
    return players

풀이 2 - (성공)

거저 먹으려고 했지만, 시간초과가 난다..🥲
다른 방법을 시도해야 한다. 아마 "해시"문제로 풀어야 하는 것 같다.

def solution(players, callings):
   
    # 초기 순위를 인덱스로 딕셔너리 생성 --> 이름: 순위
    players_ranking = {player: int(idx) for idx, player in enumerate(players)}

    for c in callings:
        current_rank = players_ranking[c]  # 호명한 선수의 현재 순위

        # 호명된 선수 순위 올리기
        players_ranking[c] -= 1
        # 밀린선수 순위 낮추기 
        players_ranking[players[current_rank - 1]] += 1

        # players 배열에서 선수들의 순위 바꿔주기
        players[current_rank - 1], players[current_rank] = c, players[current_rank - 1]

    return players
profile
철학과가 도전하는 Big Data, AI

0개의 댓글