์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฐฑ์ค€] ์ดŒ์ˆ˜ ๊ณ„์‚ฐ 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์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.