๋ฐฑ์ค€ - ๋“œ๋ž˜๊ณค ์ปค๋ธŒ(Swift)

2022. 11. 28. 10:45ใ†Algorithm

๋ฐฑ์ค€ - ๋“œ๋ž˜๊ณค ์ปค๋ธŒ(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

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

 

15685๋ฒˆ: ๋“œ๋ž˜๊ณค ์ปค๋ธŒ

์ฒซ์งธ ์ค„์— ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๋Š” ๋„ค ์ •์ˆ˜ x, y, d, g๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. x์™€ y๋Š” ๋“œ๋ž˜๊ณค ์ปค

www.acmicpc.net

 

 ๋‚˜์˜ ํ’€์ด

 

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„๋•Œ๋Š” ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์•„๋ž˜์ชฝ ๋ฐฉํ–ฅ์ด ๋˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ ์ ์— ๋ถ™์ด๋ฉด ์•„๋ž˜์— ๊ฐ€๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€? ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ

๊ทธ๋ƒฅ ํ˜„์žฌ์˜ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ 1์„ธ๋Œ€, 2์„ธ๋Œ€, 3์„ธ๋Œ€๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด์„œ ๊ทœ์น™์„ ์ฐพ์•˜๋Š”๋ฐ ์œ„๋กœ๊ฐ”๋˜ ์„ ๋ถ„์€ ์™ผ์ชฝ์œผ๋กœ, ์™ผ์ชฝ์œผ๋กœ ๊ฐ”๋˜ ์„ ๋ถ„์€ ์•„๋ž˜๋กœ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๋Š” ์„ ๋ถ„์€ ์œ„๋กœ ๊ฐ€๋Š” ๊ทœ์น™์„ ์ฐพ์•˜๋‹ค. 

์ด๋Š” ๋ฌธ์ œ์—์„œ 0๋ฒˆ๋ถ€ํ„ฐ 3๋ฒˆ๊นŒ์ง€์˜ ๋ฐฉํ–ฅ์„ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ–ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ์Šคํƒ์— ๋จผ์ € ํ˜„์žฌ์˜ ์„ธ๋Œ€๋ฅผ ๋„ฃ์€ ํ›„ ๋งˆ์ง€๋ง‰ ์„ ๋ถ„๋ถ€ํ„ฐ ๋นผ๋ฉด์„œ ๊ทธ ์„ ๋ถ„์ด ๊ฐ€๋ฅดํ‚ค๋Š” ๋ฐฉํ–ฅ์„ ํ† ๋Œ€๋กœ 1์ฆ๊ฐ€ํ•œ ํ›„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

import Foundation

let N = Int(readLine()!)!
var arr = [[Int]]()
var visited = Array(repeating: Array(repeating: false, count: 101), count: 101)

let dx = [0, -1, 0, 1]
let dy = [1, 0, -1, 0]
var result = 0
for _ in 0..<N {
    arr.append(readLine()!.components(separatedBy:" ").map{Int($0)!})
}

for element in arr {
    let x = element[1] // x์ขŒํ‘œ
    let y = element[0] // y์ขŒํ‘œ
    let d = element[2] // ๋ฐฉํ–ฅ
    let g = element[3] // ์„ธ๋Œ€
    
    visited[x][y] = true
    var stack = [Int]()
    var nx = x + dx[d]
    var ny = y + dy[d]
    visited[nx][ny] = true
    stack.append(d)
    for _ in 0..<g { // ์„ธ๋Œ€๋งŒํผ ์ง„ํ–‰
        for j in stride(from: stack.count-1, through: 0, by: -1) {
            var k = stack[j] + 1
            if k == 4 { k = 0 }
            nx = nx + dx[k]
            ny = ny + dy[k]
            visited[nx][ny] = true
            stack.append(k)
        }
    }
}

for i in 0..<100 {
    for j in 0..<100 {
        if visited[i][j], visited[i+1][j], visited[i][j+1], visited[i+1][j+1] {
            result += 1
        }
    }
}
print(result)

 

 ํ”ผ๋“œ๋ฐฑ

 

๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋“ค์„ ์–ด๋–ป๊ฒŒ 90๋„ํšŒ์ „์‹œ์ผœ์„œ ์ ์šฉ์‹œํ‚ค๋Š” ๊ฐ€์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์„ ํ–ˆ์—ˆ๋Š”๋ฐ ํ†ต์งธ๋กœ ํšŒ์ „์„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ ์œ„์น˜์—์„œ ๋งˆ์ง€๋ง‰ ์„ ๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ทœ์น™์ด ์žˆ์—ˆ๋‹ค. ๊ทœ์น™์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.

 

์•„์ง ๋ฐฉํ–ฅ์„ ์ž์œ ์ž์žฌ๋กœ ์ „ํ™˜์‹œํ‚ค๋ฉด์„œ ์ฝ”๋“œ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ์„œํˆฐ ๊ฒƒ ๊ฐ™๋‹ค. dx, dy๋ณ€์ˆ˜๋กœ ๋‘๊ณ  ๋ฐฉํ–ฅ์ด ๋„˜์–ด๊ฐ”์„๋•Œ๋Š” 0์œผ๋กœ ๋‘๋ฉด์„œ ๋ฐฉํ–ฅ์— ์ต์ˆ™ํ•ด์ ธ์•ผํ•œ๋‹ค.