ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] ์ ํ”„ ์ ํ”„ 11060
    ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2024. 7. 13. 01:39

     

    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๋ฌธ์ œ๋ฅผ ๋‚ ๋กœ ๋จน๊ณ  ํ’€์—ˆ์ง€๋งŒ ์ด๋ฒˆ์—” ๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ด์šฉํ•ด์„œ? ์‰ฝ์ง€ ์•Š์•˜๋‹ค ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฌ๊ณ  ๋จธ๋ฆฟ์†์— ๊ผฌ์˜€์Œ

     

     
Designed by Tistory.