[๋ฐฑ์ค] ์ ํ ์ ํ 11060
1. ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/11060
๋ฌธ์
์ฌํ์ด๊ฐ 1×N ํฌ๊ธฐ์ ๋ฏธ๋ก์ ๊ฐํ์๋ค. ๋ฏธ๋ก๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค. i๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ฅผ Ai๋ผ๊ณ ํ์ ๋, ์ฌํ์ด๋ Ai์ดํ๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋จ์ด์ง ์นธ์ผ๋ก ํ ๋ฒ์ ์ ํํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, 3๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ 3์ด๋ฉด, ์ฌํ์ด๋ 4, 5, 6๋ฒ ์นธ ์ค ํ๋๋ก ์ ํํ ์ ์๋ค.
์ฌํ์ด๋ ์ง๊ธ ๋ฏธ๋ก์ ๊ฐ์ฅ ์ผ์ชฝ ๋์ ์๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ต์ ๋ช ๋ฒ ์ ํ๋ฅผ ํด์ผ ๊ฐ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ฝ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ Ai (0 ≤ Ai ≤ 100)๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฌํ์ด๊ฐ ์ต์ ๋ช ๋ฒ ์ ํ๋ฅผ ํด์ผ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ ์นธ์ผ๋ก ๊ฐ ์ ์๋์ง ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
10
1 2 0 1 3 2 1 5 4 2
์ ๋ต : 5
2. ์ฝ๋
let N = Int(readLine()!)!
let maze = readLine()!.split(separator: " ").map{ Int($0)! } // 1xN ๋ฏธ๋ก ๋ง๋ค๊ธฐ
var visited = Array(repeating: false, count: N)
if N == 1{ // 1x1์ผ์ 0์ ์ถ๋ ฅ
print(0)
}else{
print(bfs()) // ํ์ํ ์ถ๋ ฅ๊ฐ ๋ฐํ
}
func bfs() -> Int {
var queue = [(0,0)] // ๋ฏธ๋ก์ ๊ฐ์ฅ ์ผ์ชฝ์์ ์์
visited[0] = true
while !queue.isEmpty{
let current = queue.removeFirst()
let idx = current.0 // ์ธํ
๋์ด ์๋ maze ๊ฐ์ ์ฐพ๊ธฐ ์ํ idx ๊ณ์ ์ฆ๊ฐ๋์ด์ผ ํจ -> ์ค๋ฅธ์ชฝ์ผ๋ก ์ ํํด์ผ ํ๊ธฐ ๋๋ฌธ
let count = current.1 // ์ ํ ํ์ ์ธก์
for i in 0...maze[idx]{ // ๋ฏธ๋ก ์์ 0์ ๊ฐ์ด ๋ค์ด์์ ์ ์๊ธฐ ๋๋ฌธ์ 0๋ถํฐ maze[idx] ํฌํจํ ์ ํํ๊ธฐ
if N-1 == i+idx{ // i+idx๋ ๊ณ์ ์ฆ๊ฐํ๋ค N-1์ ๋ง๋๊ฒ ๋๋ค๋ฉด ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋๋ฌํ๋ค๋ ๋ป
return count + 1// ๋ง์ง๋ง ์ฆ๊ฐํ๊ธฐ
}
if !visited[i+idx] && i+idx < N{// ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ์ธ๋ฑ์ค๊ฐ ๋ฐฐ์ด ๋ฒ์ ์์ ํด๋นํ๋ฉด
if maze[i+idx] == 0{// ๋ฏธ๋ก ์์ 0์ด ์๋ค๋ฉด ๋ฌด์ํ๊ณ ๋๊ธฐ๊ธฐ 0์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์๊ฐ ์ ์์
continue
}else{
visited[i+idx] = true // ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
queue.append((i+idx,count+1))// ํ์ ์ฆ๊ฐํ ์ธ๋ฑ์ค, ์ ํ ์ฆ๊ฐ ํ์ ๋ฃ๊ธฐ
}
}
}
}
return -1 // 20๋ฒ ์ค์์ ์ค๋ฅธ์ชฝ์ ๋๋ฌํ์ง ๋ชปํ์์๋ -1์ ๋ฐํ
}
3. ์ฝ๋ ์ค๋ช
BFS๋ฌธ์ ํ์์ฒ๋ผ ํ๋ค๊ฐ ์ค๊ฐ์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฆ๊ฐํ๋ ๋ถ๋ถ๋ง ์กฐ์ฌํ๋ฉด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.?
( ์ฃผ์์ ์ ๊ฐ ์๊ฐํ๋ ์ฝ๋ ์ด์ ๋ฅผ ์ ์ด๋...)
4. ํ๊ธฐ
๊ธฐ์กด์ BFS๋ฌธ์ ๋ฅผ ๋ ๋ก ๋จน๊ณ ํ์์ง๋ง ์ด๋ฒ์ ๋ฐฐ์ด ์ธ๋ฑ์ค ์ด์ฉํด์? ์ฝ์ง ์์๋ค ๋ง์ด ํท๊ฐ๋ฆฌ๊ณ ๋จธ๋ฆฟ์์ ๊ผฌ์์