프로그래머스 달리기 경주 (Python, Dictionary, Enumerate)

민갱·2023년 6월 13일

CT

목록 보기
7/35

이중 반복문 과 조건문으로 테스트케이스는 통과했지만, 풀면서 당연히 다시 풀어야 할것 같은 느낌,,
결과적으로 다시 풀었고, 코테에서 꽤나 자주 사용하게 될것 같은 느낌의 개념을 공부 했다.

  • enumerate 바로 딕셔너리 초기화 방법
  • dictionary : key & value

달리기 경주

실패

def solution(players, callings):
    answer = []
    tmp = ''
    for i in callings:
        for j in range(len(players)):
            if i == players[j]:
                tmp = players[j-1]
                players[j-1] = players[j]
                players[j] = tmp        
    return players
    
    dict = {}
    playerDict = {player: i for i, player in enumerate(players)}
    
    

    
    return playerDict

성공

def solution(players, callings):
    answer = []
    
    idx_player = {i: player for i,  player in enumerate(players)}
    player_idx = {player : i for i, player in enumerate(players)}

    # 뒤에서부터 생각을 하면 됨,
    # 1. player in enumerate(players) 는 {0 : a , 1 : b, 2 : c, ...} 이렇게 갈텐데,
    # 키 & 벨류 세트가 하나씩 i 와 player에 들어가는 것 
    # 2. 블라 블라 : 블라 블라 딕셔너리는 이렇게 만들어 지는데 for 뒤의 i,  player in enumerate(players)를 가지고 i : player로 만들겠다 라는 뜻,
    # 딕셔너리는 초기화 될떄 idx(key) : 값(values) 이렇게 초기화 되니깐, i 가 인덱스, player가 벨류이고 idx_player는 {인덱스(순서) : 벨류(선수)} 이렇게 초기화를 하는것이고
    # player_idx 는 마지막에 초기화 시 선수 명을 키로 순서를 벨류로 초기화를 해서 {선수 : 순서} 이렇게 초기화를 한것
    
    
    for i in callings:
        cur_idx = player_idx[i] 
        # 딕셔너리[키] ==> player:idx 딕셔너리에 키값인 callings의 선수 키값을 넣어줘서
        # 현재 calling 딕셔너리 선수의 idx 값을 넣어줌
        pre_idx = cur_idx-1 
        cur_player = i
        pre_player = idx_player[pre_idx]
        
        player_idx[cur_player] = pre_idx
        player_idx[pre_player] = cur_idx
        
        idx_player[pre_idx] = cur_player
        idx_player[cur_idx] = pre_player
        
    
    return list(idx_player.values())
profile
가보자고

0개의 댓글