관리 메뉴

이모저모

달리기문제 본문

코딩공부/프로그래머스(파이썬)

달리기문제

bhoon 2023. 12. 24. 19:27

프로그래머스에 가입한 후 파이썬으로 달리기 경주 문제를 풀어보았다.

def solution(players, callings):
    order_dict = {}
    fast_find = {}

    for idx, player in enumerate(players):
        order_dict[player] = idx+1
        fast_find[idx+1] = player

    for call in callings:
        order = order_dict.get(call)
        order_dict[call] = order-1

        ch_name = fast_find.get(order-1)
        order_dict[ch_name] = order

        fast_find[order] = ch_name
        fast_find[order-1] = call

    sorted_dict = sorted(order_dict.items(), key = lambda item: item[1])


    answer = [name[0] for name in sorted_dict]

    return answer

처음에는 리스트 인덱스를 이용해서 풀려고 했으나 시간 상의 오류가 생겨 딕셔너리로 풀게 되었다.

def solution(players, callings):
    pla_dic = {key: i for i, key in enumerate(players)}

    for p in callings:
        c = pla_dic[p]
        pla_dic[p] -= 1
        pla_dic[players[c-1]] += 1
        players[c-1], players[c] = players[c], players[c-1]

    return players

위의 풀이가 더 간결하다.

 

index 자체가 loop이고 dict or object는 address 개념이라 dict or object로 만들어야 한다고..

 

깊게 생각해본 적이 없어서 그런지 생각보다 어려웠던 것 같다. 꾸준하게 해보자.

'코딩공부 > 프로그래머스(파이썬)' 카테고리의 다른 글

.reduce(), .join() 사용  (0) 2024.01.02
주사위게임3, 수 조작하기1  (0) 2024.01.02
리스트 정렬 & 슬라이싱  (0) 2023.12.28
대소문자 바꿔서 출력하기  (0) 2023.12.27
수 조작하기2  (0) 2023.12.26