[프로그래머스/Python] DFS/BFS - 여행경로

Sujin Lee·2022년 4월 14일
0

코딩테스트

목록 보기
22/172
post-thumbnail
post-custom-banner

👩🏻‍🏫 DFS 풀이

from collections import defaultdict        
def solution(tickets):
    answer = []
    routes = defaultdict(list)
    # defaultdict(<class 'list'>, {'ICN': ['SFO', 'ATL'], 'SFO': ['ATL'], 'ATL': ['ICN', 'SFO']})
    for key, value in tickets:
        routes[key].append(value)
    # defaultdict(<class 'list'>, {'ICN': ['SFO', 'ATL'], 'SFO': ['ATL'], 'ATL': ['SFO', 'ICN']})
    for key in routes.keys():
        # reverse=True 내림차순
        # pop은 맨 뒤에서 빼니까
        routes[key].sort(reverse=True)
        
    stack = ["ICN"]
    # stack이 비워질 때까지
    while stack:
        s = stack[-1]
        if not routes[s]:
            answer.append(stack.pop())
        else:
            stack.append(routes[s].pop())
    
    return answer[::-1]

- 더 자세한 풀이

✏️ Python 문법

defaultdict

  • 딕셔너리 내에 존재하지 않는 키를 조회화면 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성
# 기본 딕셔너리
dict = {'A':1, 'B':2}
print(dict['C'])             # KetError: 'C'

# defaultdict
from collections import defaultdict
default_dict = defaultdict(int)
default_dict['A'] = 1
default_dict['B'] = 2
print(default_dict['C'])     # 0

## 
default_dict_2 = defaultdict(list)
default_dict_2['A'] = 1
default_dict_2['B'] = 2
print(default_dict_2['C']) # []
print(default_dict_2)  # defaultdict(<class 'list'>, {'A': 1, 'B': 2, 'C': []})

[::-1]

  • arr[A:B:C] = index A 부터 index B 까지 C의 간격으로 배열을 만들어라
  • A가 None = 처음부터
    B가 None = 할 수 있는 데까지
    (C가 양수라면 마지막 index까지, C가 음수라면 첫 index까지)
    C가 None = 한 칸 간격으로
arr = [0,1,2,3,4,5,6,7,8,9]

# 처음부터 끝까지 2칸 간격으로 
print(arr[::2])                      # [0,2,4,6,8] 
# index 1 부터 끝까지 2칸 간격으로
print(arr[1::2])                     # [1,3,5,7,9]
# 처음부터 끝까지 -1칸 간격으로 (= 역순으로) 
print(arr[::-1])                     # [9,8,7,6,5,4,3,2,1,0]
# 처음부터 끝까지 -2칸 간격으로 (= 역순, 2칸 간격으로)
print(arr[::-2])                     #  [9,7,5,3,1] 
# index 3 부터 끝까지 -1칸 간격으로 (= 역순으로) 
print(arr[3::-1])                    # [3,2,1,0] 
# index 1 부터 index 6 까지 2칸 간격으로 
print(arr[1:6:2])                    # [1, 3, 5]

https://blog.wonkyunglee.io/3

profile
공부한 내용을 기록하는 공간입니다. 📝
post-custom-banner

0개의 댓글