이모저모
달리기문제 본문
프로그래머스에 가입한 후 파이썬으로 달리기 경주 문제를 풀어보았다.
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 |