-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
50 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
### 여행경로 | ||
--- | ||
|
||
https://school.programmers.co.kr/learn/courses/30/lessons/43164 | ||
|
||
재귀로 dfs를 돌면서 풀어야 한다는 접근까지는 가능했는데, | ||
1. 단순 접근만 하면 안되고 지나온 경로를 다 저장하고, 만약 틀렸다면 롤백해야 한다는 점 | ||
2. used 역시 각각 함수가 독립적으로 가지고 있어야 하고 롤백되어야 한다는 점 등을 코딩하는데 실수가 계속 났다 | ||
|
||
배열의 경우 주소값이 함수 인자로 전달되어서 문자열로 인자로 전달해주는 걸로 바꿨다. 또 함수의 return 값을 어떻게 할지 고민하다가 | ||
그냥 return 시키지 않고 티켓을 다 사용한 경우에 arr에 append 시켜주었다. (정렬해놓았기에 가장 앞의 인자가 답이다) | ||
|
||
```python | ||
def solution(tickets): | ||
arr = [] | ||
tickets.sort() | ||
|
||
#지금까지 거쳐온 도시와, 사용한 티켓 정보를 받는 재귀함수 | ||
def dfs(cities,used): | ||
if 0 not in used: | ||
arr.append(cities) | ||
|
||
for i, ticket in enumerate(tickets): | ||
if used[i] == 1: | ||
continue | ||
if cities.split()[-1] == ticket[0]: | ||
used_copy = used[:] | ||
used_copy[i] = 1 | ||
#print(used_copy, cities+ticket[1]+" ") | ||
dfs(cities+ticket[1]+" ", used_copy) | ||
return | ||
|
||
for i, ticket in enumerate(tickets): | ||
if tickets[i][0] != "ICN": | ||
continue | ||
used = [0 for i in range(len(tickets))] | ||
used[i] = 1 | ||
cities = " " | ||
cities += (tickets[i][0] +" "+ tickets[i][1] + " ") | ||
dfs(cities, used) | ||
|
||
answer = [] | ||
arr = arr[0] | ||
answer = arr.split(" ") | ||
del answer[0] | ||
del answer[-1] | ||
return (answer) | ||
``` | ||
|
||
다른 사람들 풀이를 좀 더 공부해보아야겠다. |