youngjaeLee1026 2022. 4. 15. 13:19

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-15 13 07 55

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-15 13 08 09

3. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-15 13 08 16

4. ๋ฌธ์ œ ์„ค๊ณ„

  • ์œ„ ๋ฌธ์ œ๋„ * 2 ์—ฐ์‚ฐ, / 3 ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ฐ ๋…ธ๋“œ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด BFS๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
  • K๋Š” 1์ด์ƒ ๊ฐ’์ด๋ฏ€๋กœ / 3 ์—ฐ์‚ฐ ์‹œ 0์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ ์œ„์น˜๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•จ
  • * 2 ์—ฐ์‚ฐ ์‹œ ๋งˆ์„์˜ ๊ฐœ์ˆ˜๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋„ ํ•„์š”ํ•จ
  • ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค count ๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ ์ฃผ๊ณ ,
  • ํ•ด๋‹น count ๊ฐ’์ด K๋ฒˆ ๋งˆ์„๋ถ€ํ„ฐ ์ „์—ผ๋ณ‘์ด ํผ์ง„ ๋งˆ์„์˜ ๊ฐœ์ˆ˜์ด๋ฏ€๋กœ ์ „์ฒด ๋งˆ์„์˜ ์ˆ˜(N) - count๋ฅผ ํ†ตํ•ด ์ „์—ผ๋ณ‘์ด ํผ์ง„ ๋งˆ์„์„ ์ œ์™ธ์‹œ์ผœ ์คŒ์œผ๋กœ์จ ์ „์—ผ๋ณ‘์ด ํผ์ง€์ง€ ์•Š์€ ๋งˆ์„์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ

5. ์ „์ฒด ์ฝ”๋“œ

//MARK: - ์ „์—ผ๋ณ‘

//MARK: - Framework
import Foundation

//MARK: - Variable
var visited: [Bool] = []

//MARK: - Function
func bfs(_ N: Int, _ K: Int) -> Int {
    var count, mul, div: Int
    var queue: [Int] = []
    
    count = 0
    mul = 0
    div = 0
    queue.append(K)
    visited[K] = true
    visited[0] = true
    
    while !queue.isEmpty {
        let current: Int = queue.removeFirst()
        count += 1
        
        if current * 2 <= N {
            mul = current * 2
        }
        div = current / 3
        
        if !visited[mul] {
            visited[mul] = true
            queue.append(mul)
        }
        
        if !visited[div] {
            visited[div] = true
            queue.append(div)
        }
    }
    
    return count
}

func solution() -> Void {
    //MARK: - Input
    guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
    let N: Int = input.map { Int($0) }[0] ?? 0
    let K: Int = input.map { Int($0) }[1] ?? 0
    var result: Int = 0
    visited = Array(repeating: false, count: N + 10)
    
    //MARK: - Process
    result = N - bfs(N, K)
    
    //MARK: - Output
    print(result)
}
solution()

 

์ „์ฒด์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.