[프로그래머스] 여행경로 -python 파이썬

2024. 8. 6. 16:20·코딩테스트/프로그래머스

문제

 

 

이전의 도착지를 다시 출발지로 설정하여 재귀를 통해 문제를 해결해줄 수 있으므로 bfs보다는 dfs를 통해서 문제를 해결해주는게 적절한 문제이다.

 

이때 알파벳의 순서가 앞서는 경로를 우선시 해주므로 재귀함수를 실행하기전에 sort() 내장함수를 통해 정렬을 해주고

가능한 경로가 2개이상인 경우도 있기때문에 이에대한 처리 또한 해주어야 한다.

 

 

나의  코드

def solution(tickets):
    answer = []
    #알파벳 순서가 앞서는 경로 먼저 방문하기 위해 처리
    tickets.sort(key = lambda x:(x[0],x[1]))
    visited = [False] * len(tickets)
    
    def dfs(pre, path):
        #마지막에 하나 더 추가되는 것 고려해줌
        if len(path) == len(tickets) + 1:
            answer.append(path)
            return
        for idx, ticket in enumerate(tickets):
            #아직 방문한적 없고 출발지가 이전의 도착지와 같다면
            if ticket[0] == pre and not visited[idx]:
                visited[idx] = True
                dfs(ticket[1], path + [ticket[1]])
                #가능한 경로가 두가지이상일 때 고려해줌
                visited[idx] = False
                
    dfs("ICN",["ICN"])
    return answer[0]

 

 

배운점

 

사실 dfs 보다는 bfs 가 더 익숙해서 dfs를 응용하는 방법을 잘 몰랐는데 이 문제를 통해서 문제의 조건에 맞게 dfs 알고리즘을 적절히 변형하여 적용시키는 방법에 대해서 배우게 되었다.

 

 

그리고 

 

#가능한 경로가 두가지이상일 때 고려해줌
 visited[idx] = False

 

이 부분이 왜 가능한 경로가 2가지이상일 때를 고려해주기 위한 코드인지 이해가 안될 수 있는데 밑의 예시를 보면 쉽게 이해할 수 있다.

 

ICN -> AAA
ICN -> BBB
AAA -> ICN

 

이렇게 경로가 주어져있다고 할때

  1. ICN에서 출발하여 AAA로 가는 경로를 탐색합니다.
    • visited 리스트는 [True, False, False] 상태가 됩니다.
    • 경로는 ["ICN", "AAA"]가 됩니다.
  2. A에서 다시 ICN으로 돌아가는 경로를 탐색합니다.
    • visited 리스트는 [True, False, True] 상태가 됩니다.
    • 경로는 ["ICN", "AAA", "ICN"]가 됩니다.
  3. 이제 ICN에서 BBB로 가는 경로를 탐색할 차례입니다. 이때, 이전에 사용한 티켓 ICN -> AAA를 다시 사용할 수 있도록 visited[idx] = False를 통해 상태를 되돌립니다.
    • visited 리스트는 [False, False, True] 상태가 됩니다.
    • 경로는 ["ICN"]로 되돌아갑니다.
  4. ICN에서 B로 가는 경로를 탐색합니다.
    • visited 리스트는 [False, True, True] 상태가 됩니다.
    • 경로는 ["ICN", "BBB"]가 됩니다.

 

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 단속 카메라 - python파이썬  (4) 2024.08.27
[프로그래머스] 구명보트 - python파이썬  (1) 2024.08.21
[프로그래머스] 아이템 줍기 -python  (0) 2024.08.06
[프로그래머스] 단어변환 - python 파이썬  (2) 2024.08.01
[프로그래머스] N으로 표현 -python 파이썬  (1) 2024.07.25
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 단속 카메라 - python파이썬
  • [프로그래머스] 구명보트 - python파이썬
  • [프로그래머스] 아이템 줍기 -python
  • [프로그래머스] 단어변환 - python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IT기획
    프디아
    AWS
    신한투자증권
    MSA
    코테
    K디지털트레이닝
    EC2
    kdt교육
    알고리즘
    다익스트라
    spring
    github
    BFS
    백트래킹
    투포인터
    bastion host
    Java
    파이썬
    백준
    프로그래머스
    알파코캠퍼스
    python
    백엔드
    그리디
    UnionFind
    알파코
    코딩테스트
    깃허브
    프로디지털아카데미
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[프로그래머스] 여행경로 -python 파이썬
상단으로

티스토리툴바