Skip to content

Commit 8e1498f

Browse files
committed
[level 3] Title: 여행경로, Time: 10.03 ms, Memory: 80.8 MB -BaekjoonHub
1 parent 278d6ed commit 8e1498f

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# [level 3] 여행경로 - 43164
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/43164)
4+
5+
### 성능 요약
6+
7+
메모리: 80.8 MB, 시간: 10.03 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS)
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 09월 19일 18:20:31
20+
21+
### 문제 설명
22+
23+
<p>주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.</p>
24+
25+
<p>항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.</p>
26+
27+
<h5>제한사항</h5>
28+
29+
<ul>
30+
<li>모든 공항은 알파벳 대문자 3글자로 이루어집니다.</li>
31+
<li>주어진 공항 수는 3개 이상 10,000개 이하입니다.</li>
32+
<li>tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다.</li>
33+
<li>주어진 항공권은 모두 사용해야 합니다.</li>
34+
<li>만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.</li>
35+
<li>모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.</li>
36+
</ul>
37+
38+
<h5>입출력 예</h5>
39+
<table class="table">
40+
<thead><tr>
41+
<th>tickets</th>
42+
<th>return</th>
43+
</tr>
44+
</thead>
45+
<tbody><tr>
46+
<td>[["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]]</td>
47+
<td>["ICN", "JFK", "HND", "IAD"]</td>
48+
</tr>
49+
<tr>
50+
<td>[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]]</td>
51+
<td>["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]</td>
52+
</tr>
53+
</tbody>
54+
</table>
55+
<h5>입출력 예 설명</h5>
56+
57+
<p>예제 #1</p>
58+
59+
<p>["ICN", "JFK", "HND", "IAD"] 순으로 방문할 수 있습니다.</p>
60+
61+
<p>예제 #2</p>
62+
63+
<p>["ICN", "SFO", "ATL", "ICN", "ATL", "SFO"] 순으로 방문할 수도 있지만 ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] 가 알파벳 순으로 앞섭니다.</p>
64+
65+
<h5>문제가 잘 안풀린다면😢</h5>
66+
67+
<p>힌트가 필요한가요? [코딩테스트 연습 힌트 모음집]으로 오세요! → <a href="https://school.programmers.co.kr/learn/courses/14743?itm_content=lesson43164" target="_blank" rel="noopener">클릭</a></p>
68+
69+
70+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.util.*;
2+
class Solution {
3+
boolean[] visited;
4+
List<String> answer;
5+
6+
public String[] solution(String[][] tickets) {
7+
int airportCnt = tickets.length;
8+
visited = new boolean[airportCnt]; // 몇번 티켓을 사용했는지
9+
answer = new ArrayList<>();
10+
11+
Arrays.sort(tickets,(s1,s2) -> s1[1].compareTo(s2[1]));
12+
13+
dfs("ICN","ICN",tickets,airportCnt,0);
14+
15+
return answer.toArray(new String[0]);
16+
}
17+
18+
// 출발지, 경로, 티켓, 전체 티켓 수, 현재 사용한 티켓 수
19+
void dfs(String start, String path, String[][] tickets, int airportCnt, int cnt) {
20+
if(!answer.isEmpty()) return;
21+
if(cnt == airportCnt) {
22+
answer = Arrays.asList(path.split(" "));
23+
return;
24+
}
25+
26+
for(int i = 0; i < airportCnt; i ++){
27+
String[] ticket = tickets[i];
28+
String from = ticket[0];
29+
String to = ticket[1];
30+
31+
// 출발지 티켓을 찾음
32+
if(from.equals(start) && !visited[i]){
33+
visited[i] = true; // 사용처리
34+
dfs(to,path + " "+to, tickets, airportCnt, cnt + 1);
35+
visited[i] = false;
36+
}
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)