์์์ ์ง์ฆ๋ ์ ์ํ๋ คใ ใ ์์ ์ ๋ด๊ฐ ํ์๋ ์ฝ๋๋ฅผ ์ ๊น ์ฐธ๊ณ ํ๊ณ ํ์์... ํก.. ๐คฅ
โซ๏ธ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/43164
โซ๏ธ ๋์ ํ์ด
์ผ๋จ ๋ณด์๋ง์ DFS์์ ํ์ ํ๊ธด ํ๋๋ฐ... ์ ์ํ๋ ธ๋ค. ์์์ง์ ์ด ICN์ผ๋ก ์ง์ ๋์ด์์๋๋ฐ, dfs์ ICN์ ์ ๋ฌํ๋ฉด, ํฐ์ผ์ ์ฒซ๋ฒ์จฐ์์๊ฐ ICN์ธ๊ฑธ ์ฐพ์์ผํ๋๊ฑด๊ฐ? ์ถ์ด์ ๊ณ ๋ฏผํ๊ณ , ๊ทธ ์ดํ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ํ๋จํ๊ณ answer์ ์์์ผํ๋๋ฐ ์ด๋ป๊ฒ ํ์ง.. ๊ทธ๋ฅ ๊ณ ๋ฏผ์ด์๋ค.
๊ฒฐ๊ตญ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ฆฌ๋๊ฑด ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฅผ ๊ตฌํํ๋ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๋ค. 5๊ฐ์์ ์ ํ์ด๋ณธ ๋ฌธ์ ์์ง๋ง,, ์๊ฐ์ด ๋์ง ์์๋ค ใ
ใ
์ด ๋ฌธ์ ๋ dfs์ start ์ง์ ์ ๋์ ธ์ฃผ๋ ๊ฒ์ผ๋ก ์์ํ๋ฉด ๋๋ค.
์ฒ์์ ICN์ ๋์ ธ์คฌ์ผ๋, for ๋ฌธ์ ๋๋ ค์ ticket๋ด๋ถ์์ start์ง์ ์ด ICN์ด๋ ๋์ผํ ํฐ์ผ์ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํฐ์ผ์ด ๋ง์ฝ ์ฌ์ฉ๋์ง ์์ ํฐ์ผ์ด๋ผ๋ฉด, ๊ทธ ํฐ์ผ๋ถํฐ ์ฌ์ฉํ๊ฒ ๋๋ค.
ํฐ์ผ์ ์ฌ์ฉํ๊ณ , ํฐ์ผ์ ์๋ end ๊ณตํญ์ด, ๋ค์ ๋ด๊ฐ ๋ฐฉ๋ฌธํ start ๊ณตํญ์ด ๋๊ฒ์ง? ๊ทธ๋ผ ์ฌ๊ธฐ์ DFS์ end๋ฅผ ์ ๋ฌํด์ ๋ค์ ์ฌ๊ท๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๋ค. ์ด ๋ค์์ด ์ข ๊น๋ค๋ก์ ๋ ๋ถ๋ถ์ธ๋ฐ, ์ฌ๊ท์ ๊ตฌ์กฐ๋ฅผ ์ ์๊ฐํด์ผํ๋ค. ์ฌ๊ท๋ฅผ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ์, ์ฐจ๋ก๋๋ก return ํด๋์จ๋ค. ํน์ ์กฐ๊ฑด, ์ฆ ์ฌ๊ธฐ์๋ ๋ชจ๋ ํฐ์ผ์ ๋ค ์ฌ์ฉํ์ผ๋ฉด ๋งจ ํ์์์๋ dfs ํจ์๊ฐ return ๋ ๊ฒ์ด๊ณ , ๊ทธ๋ ๊ฒ ๋์ค๊ฒ ๋๋ฉด ๋ค์ ๊ทธ ์๋จ๊ณ dfsํจ์๋ถ๋ถ์ผ๋ก ๋์ด๊ฐ๊ฒ๋๋ค. ๊ทธ๋, visited๋ false์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด์ ๋์ด๊ฐ์ผํ๊ณ answer๋ก ์์๋ง๋ ๊ฐ๋ค๋ ํ๋์ฉ ์ง์๊ฐ๋ฉด์ ์์ dfs ํจ์๋ก ๋์ด๊ฐ์ฃผ์ด์ผํ๋ค. ๊ทธ๋์ผ ๋ค์ for๋ฌธ์ ๋๋ ์ ์์ ์ธ ์ํ๋ก ๋์์์ผ๋๊น!
โซ๏ธ ์ ๋ต ์ฝ๋
import Foundation
let tickets = [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]]
// return : ["ICN", "JFK", "HND", "IAD"]
func solution(_ tickets:[[String]]) -> [String] {
var answer = [String]()
var visited = Array(repeating: false, count: tickets.count)
let tickets = tickets.sorted{ $0[1] < $1[1] }
// MARK: - DFS ํจ์
func dfs(airport: String) {
// ๋ง์ฝ ๋ชจ๋ ํฐ์ผ์ด ๋ค ์ฌ์ฉ๋๊ณ ๋ง์ง๋ง end ์ง์ ์ด๋ผ๋ฉด?
if tickets.count == answer.count {
answer.append(airport)
return
}
for i in 0..<tickets.count {
let start = tickets[i][0]
let end = tickets[i][1]
if airport == start, !visited[i] {
visited[i] = true
answer.append(start)
dfs(airport: end)
if tickets.count + 1 == answer.count {
return
}
visited[i] = false
answer.removeLast()
}
}
}
dfs(airport: "ICN")
return answer
}
print(solution(tickets))
์ด ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ธฐ์ตํด๋์. DFS ์ ์ผ๋ฐ์ ์ธ ํํ์ด๊ธฐ๋ ํ๋ค. return ํด๋์ค๋ฉด์ false์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ , answer์ ์๋ ๊ฒ๋ค์ ํ๋์ฉ ์์ ์ฃผ๋ ๊ณผ์ ๋ ๊ผญ ์์ง๋ง๊ณ ๊ตฌํํด์ฃผ์. ์์ง ์ฌ๊ท์ ๋ํ ์ดํด๊ฐ ๋จ์ด์ง๋ ๋๋, ์ด๋ถ๋ถ์ ์๊ฐํด๋ด๋๊ฒ ๊ฐ์ฅ ์ด๋ ค์ ๋ค.
LV3๋ผ์ ์์ฒญ๋ ์คํฌ์ ์๊ตฌํ ๊ฒ ๊ฐ์ ๋ฌธ์ ์์ง๋ง, ์ฌ์ค ๊ทธ๋ฅ ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ๋ฌธ์ ์๋ค. ๊ผญ ๋ค์ํ์ด๋ณด๊ณ , ๊ธฐ์ตํด์ฃผ์ ใ ใ ใ ํ์ดํ .