콜라맛갈비 2023. 7. 7. 17:05
728x90
def solution(players, callings):
    answer = {}
    
    for i, v in enumerate(players) :
        answer[i] = v
    
    for j in callings :
        for i, v in answer.items() :
            if v == j :
                answer[i] = answer[i-1]
                answer[i-1] = j 

    return [j for j in answer.values()]

 

시간초과!!

 

1. 선수 : 등수로 딕셔너리 저장하기

def solution(players, callings):
    result = {player: i for i, player in enumerate(players)} # 선수: 등수
    for who in callings:
        idx = result[who] # 호명된 선수의 현재 등수
        result[who] -= 1 # 하나 앞 등수로 바꿔줌 -1
        result[players[idx-1]] += 1 # 앞에 위치했던 선수의 등수 +1
        players[idx-1], players[idx] = players[idx], players[idx-1] # 위치 변경
    return players

 

2. 인덱스 사용 말고,  딕셔너리를 두개 생성하는 방법!!

def solution(players, callings):
    # 선수: 위치
    p_idx_dict = {player: i for i, player in enumerate(players)}
    # 위치: 선수
    idx_p_dict = {i: player for i, player in enumerate(players)}
    
    for call in callings:
        cur_idx = p_idx_dict[call]  # 현재 선수의 위치
        pre_idx = cur_idx-1         # 현재 선수보다 앞에 있는 선수 등수
        cur_player = call
        pre_player = idx_p_dict[pre_idx]    # *

        p_idx_dict[cur_player] = pre_idx    # 현재 선수는 앞에 선수 등수가 되고
        p_idx_dict[pre_player] = cur_idx    # 앞에 선수는 뒷 등수가 되고 
        
        idx_p_dict[pre_idx] = cur_player    # 등수별 선수 표 업데이트 * 때문에
        idx_p_dict[cur_idx] = pre_player

    return list(idx_p_dict.values())

 

 

728x90