-
프로그래머스 (Level 3) - 여행경로Coding Test/Coding Test 문제 풀이 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'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프로스래머스(Level 2) - H-Index (0) 2022.01.28 프로그래머스 (Level 3) - 가장 큰 수 (0) 2022.01.27 프로그래머스 (Level 3) - 단어 변환 (0) 2022.01.26 프로그래머스 (Level 3) - 네트워크 (0) 2022.01.26 프로그래머스 (Level 2) - 프린터 (0) 2022.01.25