Problem
Solution
ํด๋น ๋ฌธ์ ๋ DFS๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ์๋์ฐจ์ ์ํ์ข์ฐ ๋ฐฉํฅ ๋ชจ๋ธ์ ๋ง๋ค์ด์ค๋ค. (ํ์๋ ์๋)
์๋์ฐจ์ ํ์ํ x,y,price,prev์ ์ํ์ข์ฐ ๋ฐฉํฅ์ enum์ผ๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํ์ต๋๋ค.
struct Car {
var x:Int,y:Int,price:Int,prev:Direction
}
enum Direction {
case left,right,up,down
}
2. ์ด๋ค ๊ณณ์ ๋ค๋ ธ๋์ง ํ์ธํด์ค ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋๋ค.
var visited:[[Int]] = Array(repeating: Array(repeating:Int.max, count: board.count), count: board.count)
3. ์ฒ์ ์์ํ๋ ๋ฐฉํฅ ์ค๋ฅธ์ชฝ๊ณผ ์๋์ชฝ์ผ๋ก ์ฌ๊ท๋ฅผ ์์ํด์ค๋๋ค.
์ฒ์์ ์ผ์ชฝ๊ณผ ์์ชฝ์ผ๋ก ์์ง์ผ ์ ์์ผ๋ฏ๋ก ๋๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ์ฌ๊ท๋ฅผ ํด์ค๋๋ค.
๋ํ ๋ฌด์กฐ๊ฑด ์ง์ ๋ฐฉํฅ์ผ๋ก ์์ง์ผ ์ ๋ฐ์ ์์ผ๋ฏ๋ก ๊ฐ๊ฒฉ์ 100์ผ๋ก ์ค์ ํด์ค๋๋ค.
moveFourDirection(car: Car(x: 1, y: 0, price: 100, prev:.right),board: board,visited: &visited)
moveFourDirection(car: Car(x: 0, y: 1, price: 100, prev:.down),board:board,visited: &visited)
4. ํ์ฌ ์์น๊ฐ ๊ฐ๋ฅํ ์์น์ธ์ง ํ์ธํด์ค๋๋ค.
๋จผ์ x,y ๋ชจ๋ board์์ ์๋์ง ํ์ธํด์ฃผ๊ณ ํ์ฌ ์์น๊ฐ ๋ฒฝ์ธ์ง ์๋์ง ํ์ธํด์ค๋๋ค.
๋ํ visited์ ์ ์ฅ๋์ด ์๋ ๊ฐ๊ฒฉ์ด ํ์ฌ ์์น์ ๊ฐ๊ฒฉ๋ณด๋ค ์ ๊ฑฐ๋ ๊ฐ์ ๋๋ง ์์ง์ฌ์ค๋๋ค.
๋ง์ฝ ํ์ฌ ์์น๊ฐ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ๊ฐ๊ฒฉ๋ณด๋ค ๋ ๋น์ธ๋ค๋ฉด ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก ๋ฉ์ถฐ์ค๋๋ค.
func isEnabled(car:Car,board:[[Int]],visited:[[Int]]) -> Bool {
return 0..<board.count ~= car.x && 0..<board.count ~= car.y && car.price <= visited[car.y][car.x] && board[car.y][car.x] == 0
}
5. 4๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ์ฌ๊ทํด์ค๋๋ค.
๋จผ์ visited์ ํ์ฌ ๊ฐ๊ฒฉ์ ์ค์ ํด์ฃผ๊ณ ์๋ก์ด ์๋์ฐจ๋ ๋ฐฉํฅ์ ๋ฐ๋ฅธ x์ y๊ฐ์ ๋ํด์ค๋๋ค.
๋ง์ฝ car์ ์ด์ ๋ฐฉํฅ์ด ํ์ฌ ์ด๋ํ๋ ค๋ ๋ฐฉํฅ๊ณผ ๋๊ฐ๋ค๋ฉด ์ง์ ์ด๋ฏ๋ก 100์ ์ถ๊ฐํด์ฃผ๊ณ
์๋๋ผ๋ฉด 600์ ์ถ๊ฐํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณค ์๋ก์ด visited๋ฅผ ๋ฃ๊ณ ์ฌ๊ทํด์ค๋๋ค.
func moveFourDirection(car:Car,board:[[Int]],visited:inout [[Int]]) {
let direction:[Direction:(Int,Int)] = [.right:(1,0),.left:(-1,0),.down:(0,1),.up:(0,-1)]
if isEnabled(car: car, board: board, visited: visited) {
visited[car.y][car.x] = car.price
for (key,value) in direction {
var newCar = Car(x: car.x + value.0, y: car.y+value.1, price: car.price, prev: key)
newCar.price += car.prev == key ? 100 : 600
moveFourDirection(car: newCar, board: board, visited: &visited)
}
}
}
6. visited์ ๊ฐ์ฅ ๋์ ์๋ ๋์ฐฉ์ ์ ๊ฐ๊ฒฉ์ ๋ฐํํด์ค๋๋ค.
return visited.last!.last!
Source Code
P.S
์ฒ์์ BFS๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ธ์ง ์๊ณ BFS๋ก ํ์๋๋ ํ ์คํธ ์ผ์ด์ค 25๋ฒ ๋นผ๊ณ ๋ค ๋ง์๋ค..
์ด๊ฒ ํจ์ ์ด์์.. ๊ทธ๋์ ๋น์ฐํ BFS๋ก ํ์ด์ผํ๊ณ ์ฃ์ง ์ผ์ด์ค๊ฐ ์๊ตฌ๋ ์ถ์ด์ ๊ณ์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ฐพ๋ค๊ฐ
๊ฒฐ๊ตญ ์ DFS๋ก ํ์ด์ผํ๋ ๋ฌธ์ ์ด๊ตฌ๋๋ฅผ ๊นจ๋ซ๊ณ DFS๋ก ๋ฐ๊ฟจ๋๋ ๋ฐ๋ก ํต๊ณผ๊ฐ ๋์๋ค...
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 6์ฃผ์ฐจ ๋ณต์ ์ ๋ ฌํ๊ธฐ (0) | 2021.09.06 |
---|---|
[Swift] 2019 KAKAO BLIND RECRUITMENT ๋งค์นญ ์ ์ (0) | 2021.09.04 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 5์ฃผ์ฐจ ๋ชจ์ ์ฌ์ (0) | 2021.08.30 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 4์ฃผ์ฐจ ์ง์ ๊ตฐ ์ถ์ฒํ๊ธฐ (0) | 2021.08.28 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค N-Queen (0) | 2021.08.28 |
๋๊ธ