๋ฌธ์ ์ค๋ช
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
5 17
์ถ๋ ฅ
4
๋ด ๋ฌธ์ ํ์ด
import Foundation
let info = readLine()!.split(separator: " ").map({Int(String($0))!})
var subin = info[0] // ์๋น์ด์ ์์์
var target = info[1] // ๋์ ์์น
var queue = [(subin, 0)] // ์ด๋ํ๋ ์๋น์ด์ ์์น์ ํด๋น ์์น๊น์ง ๊ฐ๋๋ฐ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ํํ๋ก ๋ด์
var found = false // ์ฐพ์๋์ง ์ฒดํฌํ๋ ๋ถ ๋ณ์
var visited = Array(repeating: 0, count: 100001) // ์ด๋ฏธ ์๋น์ด๊ฐ ๋ค๋
๊ฐ ์๋ฆฌ๋ค์ ์ฒดํฌํด์ฃผ๊ธฐ ์ํจ
var index = 0
if subin == target { print(0) } // ์ฒ์๋ถํฐ ์๋น์ด์ ๋์์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ => ๋ฐ๋ก ๋
else {
while true {
let (now, now_count) = queue[index]
index += 1
var next = 0 // ์๋น์ด๊ฐ ์ด๋ํ ์์น๋ฅผ ๋ด์ ๋ณ์
for i in 0..<3 {
if i == 0 { next = now - 1 } // X-1 ์ด๋
else if i == 1 { next = now + 1 } // X+1 ์ด๋
else { next = now * 2 } // X*2 ์ด๋
if next < 0 || next > 100000 || visited[next] == 1 { continue } // ์์ธ!
if next == target { found = true; break } // ์ฐพ์์ ๊ฒฝ์ฐ
visited[next] = 1 // ์๋น์ด๊ฐ ์ง๋๊ฐ ๊ณณ์ 1๋ก ์ฒดํฌํค์ฃผ๊ธฐ (๊ฐ์ ๊ณณ ๋ ์ง๋๊ฐ ํ์ ์ ํx)
queue.append((next, now_count + 1)) // ์๋น์ด๊ฐ ์ด๋ํ ์์น์ ๊ทธ ์์น๊น์ง ๊ฐ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ ์ถ๊ฐ!
}
if found { print(now_count+1); break } // ๊ฒฐ๊ณผ ์ถ๋ ฅ
}
}
๐ bfs๋ฌธ์ ๋ก, ์๋น์ด๊ฐ ์์ง์ผ ์ ์๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํด์ฃผ๋๊ฒ ํฌ์ธํธ!
์ด๋ํ๋ค๋ณด๋ฉด ์ด๋ฏธ ํ์ํ๋ ์๋ฆฌ๋ฅผ ์ค๋ณต ํ์ํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ, ๊ทธ ์์ธ๋ฅผ ์ ์ฒ๋ฆฌํด์ฃผ๋๊ฒ๋ ์ค์ํ๋ค.
- ์ด ๋ฌธ์ ๋ ์ฌ๋ฌ๊ฐ์ง ์์ธ๊ฐ ์กด์ฌํ๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ก ๋ด์ค์ผ ํ ์์ธ๊ฐ ์๋ค.
์ฒ์๋ถํฐ ์๋น์ด์ ๋์์ ์์น๊ฐ ๊ฐ์ ์ ์์ผ๋ฏ๋ก ์ด ๋๋ ๋ฐ๋ก 0์ ์ถ๋ ฅํ๊ฒ ํ๋ค. - ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ while์ ์ฌ์ฉํด ์๋น์ด์ ์ด๋๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ์ฃผ์๋๋ฐ,
์ด ๋ฐ๋ณต๋ฌธ์์๋ ์๋น์ด๊ฐ ๊ฐ ์ ์๋ ๊ฒฝ๋ก ์ธ ๊ฐ์ง ๋ฐฉํฅ์ ๋ชจ๋ ์ฒดํฌํด์ฃผ๊ณ
๊ฐ ์ ์๋ ์์น๋ผ๋ฉด queue์ ์ถ๊ฐํ์ฌ ์๋ก ํ์ํ ์์์ ์ ๋ํด๊ฐ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ค. - ์ฐ์ queue์ ํํ๋ฅผ ๋จผ์ ๋ณด๋ฉด, ํํํ ๋ฐฐ์ด์์ ํ์ธํ ์ ์๋ค. ์ด๋ ๊ฒ ์ ์ํ ์ด์ ๋
์ด๋ํ๋ ์๋น์ด์ ์์น๋ฟ๋ง ์๋๋ผ ๊ทธ ์์น๊น์ง ๊ฐ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ๊น์ง ๊ฐ์ด ๋ด์์ฃผ๊ธฐ ์ํจ์ด๋ค. - while ๋ฐ๋ณต๋ฌธ ์์์๋ index ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๊ตณ์ด queue์์ popํ์ง ์๊ณ ์ธ๋ฑ์ค๋ก ์ฐพ์์ฃผ์๋ค.
์๋น์ด๊ฐ ์ด๋ํ ์์น๋ next๋ผ๋ ๋ณ์์ ๋ด์์ฃผ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ for๋ฌธ์ ํ์ฉํ์ฌ ๋ฑ 3๋ฒ ๋ฐ๋ณตํจ์ผ๋ก์จ ์๋น์ด๊ฐ ๊ฐ ์ ์๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ฒดํฌํ๋ค. - ์ฒดํฌํ๋ฉด์ ์์ธ ๋ฐ ์๋น์ด๊ฐ ๋์์ ์ฐพ์์ ๊ฒฝ์ฐ๋ฅผ if๋ฌธ์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์๋๋ฐ,
1) next ๋ณ์๊ฐ 0 ๋ฏธ๋ง ํน์ 100000 ์ด๊ณผ์ด๊ฑฐ๋, ๊ทธ ์๋ฆฌ๊ฐ ์ด๋ฏธ ์ฒดํฌํ๋ ๊ณณ์ด๋ผ๋ฉด continueํด์ฃผ์๋ค.
์ด๋ฏธ ์ฒดํฌํ ์๋ฆฌ์ธ์ง๋ฅผ ํ๋ณํ๊ธฐ ์ํด์๋ visited ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฌ์ฉํด์ฃผ์๋ค.
๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฒ์๋งํผ์ ํฌ๊ธฐ๋ก ๋ฐฐ์ด์ ์์ฑํ์ฌ ์ง๋๊ฐ ์๋ฆฌ๋ 1์ ์ ์ฅํ๋ค.
2) next ๋ณ์๊ฐ ๋์์ ์์น target๊ณผ ๊ฐ๋ค๋ฉด found ๋ณ์๋ฅผ false๋ก ๋ฐ๊พธ๊ณ for ๋ฐ๋ณต์ ์ข ๋ฃํ๊ฒํ๋ค.
for๋ฌธ์ด ๋๋๋ฉด while๋ฌธ ๊ฐ์ฅ ๋ง์ง๋ง์ found๊ฐ true์ผ ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ while๋ฐ๋ณต์ ์ข ๋ฃํ๊ฒ ํ๋ค. - ์์ ๋ ๊ฐ์ง ์ฌํญ์ ํด๋นํ์ง ์์ ๊ฒฝ์ฐ visited๋ฐฐ์ด์ ์
๋ฐ์ดํธํ๊ณ ,
queue์ (์๋น์ด์ ๋ค์ ์์น, ๊ทธ ์์น๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ)์ ์ถ๊ฐํด์ฃผ์๋ค.
๐ก ํผ๋๋ฐฑ
- ์์ธ๋ง ์ ์๊ฐํด์ฃผ๋ฉด ์ด๋ ต์ง ์์ ๋ฌธ์ ์๋ค.
1) ์๋น์ด์ ๋์์ ์์น๊ฐ ์ฒ์๋ถํฐ ๊ฐ์ ๊ฒฝ์ฐ
2) ์๋น์ด๊ฐ ์ด๋ํ ๋ค์ ๊ฒฝ๋ก๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ 100000๋ณด๋ค ํด ๊ฒฝ์ฐ
3) ์๋น์ด๊ฐ ์ด๋ํ ๋ค์ ๊ฒฝ๋ก๊ฐ ์ด๋ฏธ ์ฒดํฌํด์คฌ๋ ์๋ฆฌ์ผ ๊ฒฝ์ฐ
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ํ ๋งํ BOJ #7659 (0) | 2021.10.08 |
---|---|
[Swift Algorithm] ์ ๊ธฐ๋ ๋ฐฐ์ถ BOJ #1012 (0) | 2021.10.05 |
[Swift Algorithm] ๋ถ! BOJ #4179 (0) | 2021.10.02 |
[Swift Algorithm] ํ ๋งํ BOJ #7576 (0) | 2021.10.02 |
[Swift Algorithm] ๋ฏธ๋ก ํ์ BOJ #2178 (0) | 2021.10.01 |
๋๊ธ