bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 43164 여행경로 본문

Algorithm/Prob

Py) 프로그래머스 43164 여행경로

헬린인형 2022. 2. 14. 23:37

3회차 - 마지막이 좀 찝찝한데 다시 보자

2회차 - 건강한 멘탈로 다시 풀자

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

음..그래. 정말 열심히 풀었는데 테스트케이스 2개랑 3번만 맞췄다.

음ㅁ.. 고민 엄청하다가 제출하면 맞출 줄 알았는데 아니었다-

도대체 뭘 생각못한걸까..?

하지만 예전엔 접근도 잘 못하고 정말 싫어하던 bfs dfs를 열심히 푼 나 자신 칭찬해

아래는 틀린코드 (아까우니까 올리기,,)

from collections import deque
def solution(tickets):
    answer = []
    stack = deque([])
    visited = [False for i in range(len(tickets))]

    stack.append(tickets[0][0])   # icn으로 시작합니다

    while stack:
        top = stack.pop()
        answer.append(top)
        for ticket in range(len(tickets)):
            if visited[ticket] == True or tickets[ticket][0] != top:
                continue                        
            else:                               
                if len(stack):                  # stack이 비지 않았다면 하나 pop해서 확인
                    tmp = stack.pop()
                    if tickets[ticket][1] > tmp:   
                        put = tmp
                    else:
                        put = tickets[ticket][1]
                        idx = tickets.index([tickets[ticket][0], tmp])
                        # print(idx)
                        visited[idx] = False
                        visited[ticket] = True
                    stack.append(put)
                else:
                    visited[ticket] = True
                    stack.append(tickets[ticket][1])

    return answer

print(solution([["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]]))
# print(solution([["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]]))

 

참고 중인 코드

def solution(tickets):
    answer = []
    dest = dict()

    for ticket in tickets:
        if ticket[0] in dest:
            dest[ticket[0]].append(ticket[1])
        else:
            dest[ticket[0]] = [ticket[1]]       # []

    for i in dest:
        dest[i].sort(reverse=True)      # 각 리스트 역순

    stack = ['ICN']

    while stack:
        top = stack[-1]
        if top not in dest or len(dest[top]) == 0:
            answer.append(top)
            stack.pop()
        else:                   # 도착지가 있는 애였을 때
            stack.append(dest[top][-1])     # 리스트 맨뒤
            dest[top].pop()

    answer.reverse()
    return answer

print(solution([["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]]))

 

김예 다 뿌순다

반응형
Comments