Coding Test/Coding Test 문제 풀이
프로그래머스 (Level 3) - 여행경로
임빈영
2022. 1. 27. 16:52
문제 설명
코딩테스트 연습 - 여행경로
[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]
programmers.co.kr
풀이
주어진 항공권 정보를 이용해 방문하는 공항 경로를 찾아내는 문제이다.
방문 가능한 경로가 2개 이상일 경우 알파벳 순서로 방문을 해야 하는 조건 때문에 까다로웠던 문제이다. 해당 조건을 고려해서 방문할 수 있는 모든 여행경로를 DFS 알고리즘을 이용해서 탐색한 후 List 자료구조에 저장을 하였다.
모든 여행경로의 탐색이 끝났으면, List 자료구조 내의 데이터를 알파벳 순으로 오름차순을 한다. 오름차순으로 정렬된 List의 첫 번째 원소를 반환해주는 방식으로 문제를 해결하였다.
전체 소스코드
import java.io.*;
import java.util.*;
public class Solution03 {
static boolean[] visited; // 각 경로의 방문 여부를 저장하기 위한 배열
static List<String> result = new ArrayList<>();
public String[] solution(String[][] tickets) {
visited = new boolean[tickets.length];
dfs("ICN", "ICN", 0, tickets);
Collections.sort(result);
String[] answer = result.get(0).split(" ");
return answer;
}
/** dfs 알고리즘을 이용해서 모든 여행경로들을 탐색 */
static void dfs(String start, String route, int count, String[][] tickets) {
if (count == tickets.length) {
result.add(route);
return;
}
for (int i = 0; i < tickets.length; i++) {
/* 아직 방문하지 않은 여행경로인 경우 */
if (visited[i] == false && tickets[i][0].equals(start)) {
visited[i] = true;
dfs(tickets[i][1], route + " " + tickets[i][1], count + 1, tickets);
visited[i] = false;
}
}
}
}
728x90