코테/프로그래머스

[프로그래머스/Lv. 3] 여행경로 (JAVA)

imname1am 2023. 10. 25. 10:25
반응형

🔺 문제

 

프로그래머스

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

programmers.co.kr

 

🧩  해결 아이디어

• DFS 

1. DFS를 활용해 모든 경우의 수를 구한다.  

  - DFS 종료 조건 ) 모든 티켓을 다 썼을 때, 도착지 값을 이동 경로 리스트에 저장한다.

  - 반복문 ) 방문한 적 없고, 현재 도시가 다음 여행 경로의 도착지라면 탐색

 

2. 이동 경로 리스트를 오름차순으로 정렬하고, 리스트에서 맨 앞 값 (routeList.get(0))을 가져오면 알파벳 순으로 가장 빠른 경로다.

3. 첫 번째 문자열을 공백을 기준으로 분리하여 배열에 저장하고 출력한다.

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;
 
class Solution {
    static String[][] tickets;
    
    static boolean[] visited;
    static List<String> routeList = new ArrayList<>();    // 이동 경로 리스트
    static int cnt = 0;
    
    public String[] solution(String[][] tickets) {
        this.tickets = tickets;
        
        visited = new boolean[tickets.length];        
        
        dfs("ICN""ICN"0);   // 현재 도시, 여행 경로, 사용한 티켓 수
        
        Collections.sort(routeList);    // 알파벳 순 경로 가져오기 위한 오름차순 정렬
        
        String[] answer = routeList.get(0).split(" ");
        return answer;
    }
    
    private static void dfs(String now, String route, int depth) {    
        if(depth == tickets.length) {   // 모든 티켓 다 썼을 때, 리스트에 이동 경로 추가하기
            routeList.add(route);
            return;
        }
        
        for(int i = 0 ; i < tickets.length ; i++) {
            if(!visited[i] && now.equals(tickets[i][0])) { // 방문한 적 없고, 현재 도시가 다음 여행 경로의 도착지라면 탐색
                visited[i] = true;
                dfs(tickets[i][1], route + " " + tickets[i][1], depth + 1);
                visited[i] = false;
            }
        }
    }
}
cs

 


🔺 다른 풀이들

- Node 클래스를 생성하신 풀이

 

프로그래머스 - 여행경로(Java)

dfs 문제입니다. 주어지는 항공권을 모두 사용해서 여행 경로를 만들어야 합니다. 저의 경우 항공권이 주어지면 해당 정보를 Map에 저장했습니다. Map에 저장하면 O(1)로 value를 가져올 수 있기 때문

ksb-dev.tistory.com

 


💬 느낀 점

플그머스로 dfs bfs 푸는 게 헷갈린당.....ㅠ

담엔 꼭 더 잘 풀어보겠다.

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ DFS 풀이 참고

 

[DFS] 프로그래머스 여행경로 "JAVA"

https://programmers.co.kr/learn/courses/30/lessons/43164?language=java주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.항공권 정보가 담긴 2차원 배열 ticke

velog.io

 

 

[프로그래머스] 여행경로 - JAVA

DFS/BFS 공부 중 풀어본 문제다. 이론은 대충 알겠는데 막상 구현하려니 머리가 터질 것 같았다. ㅋㅋㅋDFS는 깊이 우선 탐색으로 함수 속에 함수... 그 속에 함수... 또 그 속에 함수... 이런 식으로

velog.io

반응형