-
프로그래머스 여행경로개발/코딩테스트 2024. 9. 12. 19:12
문제
주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.제한사항
- 모든 공항은 알파벳 대문자 3글자로 이루어집니다.
- 주어진 공항 수는 3개 이상 10,000개 이하입니다.
- tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다.
- 주어진 항공권은 모두 사용해야 합니다.
- 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.
- 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.
예시
tickets= [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] return= ["ICN", "JFK", "HND", "IAD"] tickets= [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] return= ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]
전체를 다 방문을 하면서 String을 +를 한다
방문시 방문여부를 표시하며 해당 블럭을 다 방문을 했다면 다시 방문 할 수 있도록 변경한다
+ 된 리스트를 sort 해서 알파벳 순서로 정렬을 한다
import java.util.*; class Solution { private boolean[] visited; List<String> answerList = new ArrayList<>(); public String[] solution(String[][] tickets) { String[] answer = {}; visited = new boolean[tickets.length]; dfs(0,"ICN","ICN",tickets); //알파벳순으로 정렬한다 Collections.sort(answerList); //첫번째 요소를 뽑은 후 split을 통해 ,로 배열로 변환한다 return answerList.get(0).split(","); } private void dfs(int depth,String start , String path , String[][] tickets){ if(depth == visited.length){ answerList.add(path); return; }else{ for(int i=0; i< visited.length; i++){ if(visited[i] ==false && start.equals(tickets[i][0])){ visited[i] = true; //String을 ,로 +한다 dfs(depth+1,tickets[i][1],path +"," + tickets[i][1] , tickets); //방문 여부를 다시 해제한다 visited[i] = false; } } } } }
'개발 > 코딩테스트' 카테고리의 다른 글
프로그래머스 최솟값 만들기 (1) 2024.09.14 프로그래머스 올바른 괄호 (0) 2024.09.13 프로그래머스 단어변환 (1) 2024.09.10 프로그래머스 게임맵 최단거리 (1) 2024.09.09 프로그래머스 베스트앨범 (3) 2024.09.07