1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ์ ๋ฌธ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋๋น์ฐ์ ํ์์ ์ฌ์ฉํด์ผ๊ฒ ๋ค๊ณ ๋ ์ฌ๋ฆฌ๋๊ฒ ํ๋ค์๋ ๋ฌธ์
- ๋จ์ํ * 2 ์ฐ์ฐ๊ณผ / 3 ์ฐ์ฐ์ ๋ฐ๋ณตํด์ ์งํํ๋ค๋ณด๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ์์
- ๋, * 2 ์ฐ์ฐ ์ 5์๋ฆฌ ์ด์ ๋์ด๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํด์ฃผ์ด์ผ ํจ
- ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ํ์ฌ ๊ฐ์์ * 2 ํ ์์น, / 3 ํ ์์น๋ฅผ ๊ฐ๊ฐ์ ๋ ธ๋๋ก ๋ณด๊ณ ํด๋น ์์น์ ๋ํด
- BFS๋ฅผ ์งํํ๊ฒ ๋๋ฉด ๋ฏธ๋ก ์ฐพ๊ธฐ ๋ฌธ์ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ฏ์ด ์ด์ ๋ฒํผ ํ์ + 1์ ๊ฐ๊ฐ์ ์์น์ ๋์ ํ๊ณ ,
- ์ต์ข ์ ์ผ๋ก ์ํ๋ ๊ฐ์ ์์น์ ๋ฒํผ ํ์๋ฅผ ์ถ๋ ฅํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
- BFS๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ํด๋น ์์น(์ฐ์ฐ ๊ฒฐ๊ณผ)๋ฅผ ์ต์ด์ ๋ฐ๊ฒฌํ์ ๋ ๋์ ๊ฐ์ด ์ต์๊ฐ์์ด ๋ณด์ฅ๋๊ณ , ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ๋๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋ ๊ฒ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ์ ํํ๊ฒ ์ ๋ต์ ๊ตฌํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ์ด์ํ ๊ณ์ฐ๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Variable
var N: Int = 0
let MAX: Int = 1000000
var visited: [Bool] = []
//MARK: - Function
func bfs(_ start: Int) -> Int {
var counts: [Int] = Array(repeating: 0, count: MAX)
var queue: [Int] = []
var mul: Int = 0
var div: Int = 0
queue.append(start)
visited[start] = true
while !queue.isEmpty {
let current: Int = queue.removeFirst()
if current * 2 < MAX {
mul = current * 2
}
div = current / 3
if !visited[mul] {
visited[mul] = true
queue.append(mul)
counts[mul] = counts[current] + 1
}
if !visited[div] {
visited[div] = true
queue.append(div)
counts[div] = counts[current] + 1
}
}
return counts[N]
}
func solution() -> Void {
//MARK: - Input
var result: Int = 0
N = Int(readLine() ?? "0") ?? 0
visited = Array(repeating: false, count: MAX)
//MARK: - Process
result = bfs(1)
//MARK: - Output
print(result)
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Graph Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชฉ์์ ๋ฏธ๋ก ํ์ถ (0) | 2022.04.15 |
---|---|
์ ์ผ๋ณ (0) | 2022.04.15 |
๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ_BFS (0) | 2022.04.15 |
๋ฏธ๋ก ์ฐพ๊ธฐ (0) | 2022.04.15 |
์ ๋ฐ์ด๋ฌ์ค_BFS (0) | 2022.04.15 |