ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] ์ดŒ์ˆ˜ ๊ณ„์‚ฐ 2644๋ฒˆ
    ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2023. 6. 4. 23:33

    ์ง€๋‚œ๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ BFS ๋ฌธ์ œ์— ๋„์ „ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ์ ‘ํ–ˆ์„ ๋•Œ, ๊ทธ๋ฆผ์ด ์—†์ด ๊ธ€๋กœ๋งŒ ์„ค๋ช…๋˜์–ด ์žˆ์–ด์„œ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฌธ์ œ๋ฅผ ์ฝ์–ด๋ณด๊ณ ,

    ์˜ˆ์ œ ์ž…๋ ฅ๋œ ์ˆซ์ž๋“ค์„ ์‚ดํŽด๋ณด๋ฉฐ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. 

     


    1. ๋ฌธ์ œ ๋งํฌ

     

     

    2644๋ฒˆ: ์ดŒ์ˆ˜๊ณ„์‚ฐ

    ์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด

    www.acmicpc.net

    https://www.acmicpc.net/problem/2644

    ๋ฌธ์ œ 

    ์šฐ๋ฆฌ ๋‚˜๋ผ๋Š” ๊ฐ€์กฑ ํ˜น์€ ์นœ์ฒ™๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ดŒ์ˆ˜๋ผ๋Š” ๋‹จ์œ„๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋…ํŠนํ•œ ๋ฌธํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ดŒ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด๋ฅผ 1์ดŒ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋กœ๋ถ€ํ„ฐ ์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‚˜์™€ ์•„๋ฒ„์ง€, ์•„๋ฒ„์ง€์™€ ํ• ์•„๋ฒ„์ง€๋Š” ๊ฐ๊ฐ 1์ดŒ์œผ๋กœ ๋‚˜์™€ ํ• ์•„๋ฒ„์ง€๋Š” 2์ดŒ์ด ๋˜๊ณ , ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ ํ• ์•„๋ฒ„์ง€๋Š” 1์ดŒ, ๋‚˜์™€ ์•„๋ฒ„์ง€ ํ˜•์ œ๋“ค๊ณผ๋Š” 3์ดŒ์ด ๋œ๋‹ค.

    ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ๋ถ€๋ชจ ์ž์‹๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์–ด์ง„ ๋‘ ์‚ฌ๋žŒ์˜ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

     

    ์ž…๋ ฅ

    ์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„์—๋Š” ๋ถ€๋ชจ ์ž์‹๋“ค ๊ฐ„์˜ ๊ด€๊ณ„์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง„๋‹ค. ๋„ท์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๋ถ€๋ชจ ์ž์‹๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๋ฒˆํ˜ธ x,y๊ฐ€ ๊ฐ ์ค„์— ๋‚˜์˜จ๋‹ค. ์ด๋•Œ ์•ž์— ๋‚˜์˜ค๋Š” ๋ฒˆํ˜ธ x๋Š” ๋’ค์— ๋‚˜์˜ค๋Š” ์ •์ˆ˜ y์˜ ๋ถ€๋ชจ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    ๊ฐ ์‚ฌ๋žŒ์˜ ๋ถ€๋ชจ๋Š” ์ตœ๋Œ€ ํ•œ ๋ช…๋งŒ ์ฃผ์–ด์ง„๋‹ค.

     

    ์ถœ๋ ฅ

    ์ž…๋ ฅ์—์„œ ์š”๊ตฌํ•œ ๋‘ ์‚ฌ๋žŒ์˜ ์ดŒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋‘ ์‚ฌ๋žŒ์˜ ์นœ์ฒ™ ๊ด€๊ณ„๊ฐ€ ์ „ํ˜€ ์—†์–ด ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ์—๋Š” -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

    ๋”๋ณด๊ธฐ

    ์˜ˆ์ œ ์ž…๋ ฅ

    9
    7 3
    7
    1 2
    1 3
    2 7
    2 8
    2 9
    4 5
    4 6

    ์ •๋‹ต : 3

    9
    8 6
    7
    1 2
    1 3
    2 7
    2 8
    2 9
    4 5
    4 6

    ์ •๋‹ต : -1

     

    2. ์ฝ”๋“œ

    let n = Int(readLine()!)!
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let num1 = input[0]
    let num2 = input[1]
    let m = Int(readLine()!)!
    
    var graph : [[Int]] = Array(repeating: [], count: n+1)
    var visited : [Bool] = Array(repeating: false, count: n+1)      // n+1 ๊ฐฏ์ˆ˜๋งŒํผ Bool ๋ฐฐ์—ด ๋งŒ๋“ฌ ๋ฐฉ๋ฌธ์‹œ true
    
    for _ in 0..<m{
        let input = readLine()!.split(separator: " ").map { Int(String($0))! }
        let x = input[0]        
        let y = input[1]        
        graph[x].append(y)      // graph[x] = [y]
        graph[y].append(x)      // graph[y] = [x]
    }
    
    
    print(bfs(graph: graph))
    
    
    func bfs(graph: [[Int]]) -> Int{
        var queue = [(num1 , 0) ]         // ํ ๋ฐฐ์—ด ์•ˆ์— ํŠœํ”Œ๊ฐ’์„ ๋„ฃ์Œ ( ๊ฐ’, ๊ฐ€์ค‘์น˜ )
        var find : Bool = false           // ๋ฐœ๊ฒฌํ•˜๋ฉด true
        visited[num1] = true              // ์ฒ˜์Œ ๋ฐฉ๋ฌธ์€ num1 ๊ฐ’์œผ๋กœ ์ง€์ • -> ์–ด์ฐจํ”ผ ์–‘๋ฐฉํ–ฅ์ด๋ผ ์–ด๋””์„œ ์‹œ์ž‘ํ•˜๋“  ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ
        
        while !queue.isEmpty{
            let currentNode = queue.removeFirst()
            
            if currentNode.0 == num2{       // ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด num2๋ž‘ ๊ฐ™๋‹ค๋ฉด
                find = true                 // find ๊ฐ’์„ true๋กœ ๋ฐ”๊พธ๊ณ 
                return currentNode.1        // ๋ฉˆ์ถ”๊ฒŒ ๋งŒ๋“ฌ
            }
            
            for node in graph[currentNode.0]{   //currentNode.0์˜ ๊ฐ’์€ ex)2์ด๋ฉด graph[2]๊ฐ’๋„ 2์ธ๋ฑ์Šค์— ์žˆ์Œ
                if visited[node] == true{
                    continue
                }
                visited[node] = true
                queue.append((node,currentNode.1 + 1))
            }
        }
        return -1
    }

     

    3. ์ฝ”๋“œ ์„ค๋ช…

    ์˜ˆ์ œ ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๋‘ ์‚ฌ๋žŒ, ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์˜ ๊ฐœ์ˆ˜์ธ m๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. 

    graph์™€ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฐ์—ด visited์„ ๋ฏธ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

    graph๋Š” Array(repeating: [], count: n+1)์„ ํ†ตํ•ด ์ „์ฒด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n+1๋งŒํผ์˜ ๋นˆ ๋ฐฐ์—ด []์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    visited๋Š” Array(repeating: false, count: n+1)์„ ํ†ตํ•ด ์ „์ฒด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n+1๋งŒํผ์„ false๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์€ ๊ฐ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

     

    ๋ฐ”์ด๋Ÿฌ์Šค ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ์ €์˜ ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด ๋ณธ ๊ฒฐ๊ณผ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ฒŒ ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตณ์ด ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
    ์‹ค์ œ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, graph[1]์˜ ๊ฐ’์„ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด graph[1]์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋„ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ €์žฅ๋œ ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค..๐Ÿ˜…

    ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„์—๋Š” queue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ๋Š” ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ num1์„ ๋„ฃ๊ณ , ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ num2๊นŒ์ง€ ๋„๋‹ฌํ•˜๋ฉด ๋ฉˆ์ถ”์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ฐพ์Œ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” find ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    while๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ๋ฅผ ์ˆœํ™˜ํ•˜๋ฉฐ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ํ์— queue.append((node, currentNode.1 + 1)) ์™€ ๊ฐ™์ด ํ˜„์žฌ ๋…ธ๋“œ์™€ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ค‘์น˜๋Š” ํ˜„์žฌ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ดŒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐˆ ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋””.

    ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ํ˜„์žฌ ํƒ์ƒ‰ ์ค‘์ธ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ num2์™€ ์ผ์น˜ํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น ๋…ธ๋“œ๊นŒ์ง€์˜ ์ดŒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ๋งŒ์•ฝ ๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Designed by Tistory.