-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
💬 문제
https://www.acmicpc.net/problem/16918
💬 Idea
- N이 짝수면 모두 O인(모두 폭탄인) 배열을 문자열로 출력하고,
- N이 홀수이면 반복문을 2 간격으로 돌면서 폭탄 배열을 갱신한다.
- 가장 처음에 봄버맨은 일부 칸에 폭탄을 설치해 놓는다. 모든 폭탄이 설치된 시간은 같다.(1)
- 다음 1초 동안 봄버맨은 아무것도 하지 않는다.(1)
- 다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시에 설치했다고 가정한다. (2)
- 1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다. (3)
- 3과 4를 반복한다. (—> 간격 2씩 폭탄 배열의 O 터뜨리고 터진 곳 . 으로 갱신)
💬 풀이
import Foundation
func solution16918() {
let RCN = readLine()!.split(separator: " ").map({ Int(String($0))! })
var bombArr: [[String]] = []
for _ in 0..<RCN[0] {
bombArr.append(Array(readLine()!).map({ String($0) }))
}
var allBombArr: [[String]] = []
func bomb(x: Int, y: Int) {
allBombArr[x][y] = "."
if x + 1 <= bombArr.count - 1 {
allBombArr[x + 1][y] = "."
}
if x - 1 >= 0 {
allBombArr[x - 1][y] = "."
}
if y + 1 <= bombArr[0].count - 1 {
allBombArr[x][y + 1] = "."
}
if y - 1 >= 0 {
allBombArr[x][y - 1] = "."
}
}
for _ in stride(from: 1, to: RCN[2], by: 2) {
allBombArr = Array(repeating: Array(repeating: "O", count: bombArr[0].count), count: bombArr.count)
for (idx, i) in bombArr.enumerated() {
for (jdx, _) in i.enumerated() {
if bombArr[idx][jdx] == "O" {
bomb(x: idx, y: jdx)
}
}
}
bombArr = allBombArr
}
if RCN[2] % 2 == 0 {
for _ in bombArr {
print(String(repeating: "O", count: bombArr[0].count))
}
} else {
for i in bombArr {
print(i.joined())
}
}
}