Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 3_여행 경로

syunze 2024. 3. 3. 17:50

📌문제 유형

DFS/BFS

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

- (실패) 50점

from collections import deque
import copy 

def solution(tickets):
    ans = []
    cnt = 0
    q = deque(tickets)
    
    while cnt < len(tickets):
        answer = []

        if cnt > 0:
            q.append(q.popleft())

        t = copy.deepcopy(q)
        
        tmp = 0
        while t:
            tmp += 1

            if tmp > (len(tickets)-1) * 2:
                break

            a,b = t.popleft()

            if len(answer) == 0:
                answer.append(a)
                answer.append(b)
                continue

            if a != answer[-1]:
                t.append([a,b])
            else:
                answer.append(b)
        
        if len(t) == 0:
            ans.append(answer)
        cnt += 1
    
    ans.sort()
    
    return ans[0]

 

 

📌다른사람의 문제풀이

- BFS, DFS 두 개의 풀이

 

 

여행 경로 - 파이썬(Python)

https://programmers.co.kr/learn/courses/30/lessons/43164 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr 문제 설명 주어

lottegiantsv3.tistory.com

# BFS
from collections import deque
def solution(tickets):
    answer = []
    q = deque()
    q.append(("ICN",["ICN"], []))
    
    while q:
        airport, path, used = q.popleft()

        if len(used) == len(tickets):
            answer.append(path)
        
        for idx, ticket in enumerate(tickets):
            if ticket[0] == airport and not idx in used:
                q.append((ticket[1], path+[ticket[1]], used+[idx]))
                
    
    answer.sort()

    return answer[0]

 

📌리뷰

- queue에 (현재 위치, 경로, 방문 인덱스)로 저장해서 queue에 있는거 다 쓸때까지 반복

- queue에 어떤 정보를 담을 것인지 고민하기!!!!

728x90