S E P H ' S

[Python] 여행 경로 본문

Algorithm/Programmers

[Python] 여행 경로

yoseph0310 2021. 8. 7. 17:52
 

코딩테스트 연습 - 여행경로

[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]

programmers.co.kr

풀이

1. 시작은 항상 "ICN"

2. 가능한 경로가 2개 이상이면 알파벳 순서가 앞서는 경로를 return -> tickets을 오름차순으로 정렬하고 찾은 완전한 경로가 정답

3. 주어진 항공권 모두 사용

4. 모든 도시를 방문할 수 없는 경우는 주어지지 않는다. -> answer는 항상 존재

5. 중복된 항공권 존재 -> 방문 여부를 인덱스로 관리

 

def solution(tickets):
    answer = []
    tickets.sort()
    used_ticket = []
    DFS(tickets, "ICN", used_ticket)
    
    answer = ["ICN"]
    for ticket_num in used_ticket:
        answer.append(tickets[ticket_num][1])
    
    return answer

def DFS(tickets, start, used_ticket):
    for i in range(len(tickets)):
        # 출발 공항이 start와 같으면서 사용하지 않은 티켓
        if tickets[i][0] == start and i not in used_ticket:
            used_ticket.append(i)
            DFS(tickets, tickets[i][1], used_ticket)
            
            if len(used_ticket) == len(tickets):
                return
            else:
                used_ticket.pop()

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 다음 큰 숫자  (0) 2021.08.22
[Python] 카펫  (0) 2021.08.08
[Python] 단어 변환  (0) 2021.08.07
[Python] 네트워크  (0) 2021.08.07
[Python] 땅따먹기  (0) 2021.07.31