티스토리 뷰

PS

[Swift] 백준_숨바꼭질

희철 2023. 1. 11. 23:54

문제

 

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

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

 

풀이

 

BFS를 이용해 하나의 수에서 -1한 값, +1한 값, *2한 값을 각각 조건을 확인해준 후, 큐에 넣고 확인하는 것을 반복해주었다.

 

100001크기의 배열을 선언해서 구현하였따.

처음에 수빈이가 있는 queue[5]를 0으로 초기화하고, +1, -1, *2한 값들에 대해서 배열의 해당 위치가 -1인지 확인 후에 아니라면 이전 값에 +1을 하여 queue[target]이 -1이 아닐때 바로 queue[target]을 출력하도록하였다.

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
var count = [Int](repeating: -1, count: 100001)
let target = input[1]
var queue = [input[0]]
var idx = 0
count[input[0]] = 0
while count[target] == -1 {
    let current = queue[idx]
    idx += 1
    let temp = [current + 1, current - 1, current * 2]
    for i in temp {
        if i < 0 || i > 100000 {
            continue
        }
        if count[i] == -1 {
            count[i] = count[current] + 1
            queue.append(i)
        }
    }
}
print(count[target])

 

___________________________________________________________________________________________________

 

BFS가 응용이 정말 많이 돼서 빨리 익숙해져야한다.

 

'PS' 카테고리의 다른 글

[Swift] 백준_적록색약(10026)  (0) 2023.01.12
[Swift] 백준_유기농 배추(1012)  (2) 2023.01.12
[Swift] 백준_불!(4179)  (0) 2023.01.11
[Swift] 백준_토마토(7569)  (0) 2023.01.11
[Swift] 백준_토마토(7576)  (0) 2023.01.11
댓글
최근에 올라온 글
Total
Today
Yesterday