MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

MUKER 2023. 7. 22. 00:52
๋ฌธ์ œ ๋งํฌ
 

7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜

www.acmicpc.net


๋ฌธ์ œ

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์„ธ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์—๋Š” ์ฒด์ŠคํŒ์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด l(4 ≤ l ≤ 300)์ด ์ฃผ์–ด์ง„๋‹ค. ์ฒด์ŠคํŒ์˜ ํฌ๊ธฐ๋Š” l × l์ด๋‹ค. ์ฒด์ŠคํŒ์˜ ๊ฐ ์นธ์€ ๋‘ ์ˆ˜์˜ ์Œ {0, ..., l-1} × {0, ..., l-1}๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋‘˜์งธ ์ค„๊ณผ ์…‹์งธ ์ค„์—๋Š” ๋‚˜์ดํŠธ๊ฐ€ ํ˜„์žฌ ์žˆ๋Š” ์นธ, ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋‚˜์ดํŠธ๊ฐ€ ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ


์„ฑ๊ณต ํ’€์ด

import Foundation

let dy = [1,2,2,1,-1,-2,-2,-1]
let dx = [-2,-1,1,2,2,1,-1,-2]

for _ in 0..<Int(readLine()!)! {
    let length = Int(readLine()!)!
    let S = readLine()!.split { $0 == " " }.map { Int($0)! }
    let G = readLine()!.split { $0 == " " }.map { Int($0)! }
    var queue = [(S,0)]
    var visited = Array(repeating: Array(repeating: false, count: length), count: length)
    visited[S[0]][S[1]] = true
    
    while !queue.isEmpty {
        let current = queue.removeFirst()
        if current.0 == G {
            print(current.1)
            break
        }
        for i in 0..<dy.count {
            let my = current.0[0] + dy[i]
            let mx = current.0[1] + dx[i]
            
            guard my >= 0 && my < length && mx >= 0 && mx < length && !visited[my][mx] else { continue }
            visited[my][mx] = true
            queue.append(([my,mx],current.1+1))
        }
    }
}

ํ’€์ด ํ‚ค์›Œ๋“œ

  • ๋‚˜์ดํŠธ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 8๊ฐ€์ง€ ๋ฐฉํ–ฅ์„ ๊ณ ๋ คํ•˜์—ฌ queue์—ญํ• ์„ ํ•ด์ฃผ๋Š” ๋ฐฐ์—ด์— ๋‹ด์•„ ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰์œผ๋กœ ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋Š” ์ตœ์†Œ count๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.