정답 코드
import Foundation
let dr = [-1, 1, 0, 0, -1, -1, 1, 1]
let dc = [0, 0, -1, 1, -1, 1, -1, 1]
let N = Int(readLine()!)!
var board_info = [[Character]]()
var current_status = [[Character]]()
for _ in 0..<N {
board_info.append(Array(readLine()!))
}
for _ in 0..<N {
current_status.append(Array(readLine()!))
}
var ans = Array(repeating: Array(repeating: ".", count: N), count: N)
var mine = false
for r in 0..<N {
for c in 0..<N {
if current_status[r][c] == "x" {
var cnt = 0
for d in 0..<8 {
let nr = r + dr[d]
let nc = c + dc[d]
if nr >= 0 && nr < N && nc >= 0 && nc < N && board_info[nr][nc] == "*" {
cnt += 1
}
}
ans[r][c] = String(cnt)
if board_info[r][c] == "*" {
mine = true
}
}
}
}
if mine {
for r in 0..<N {
for c in 0..<N {
if board_info[r][c] == "*" {
ans[r][c] = "*"
}
}
}
}
for line in ans {
print(line.joined())
}
코드 설명
- 열린 좌표의 경우에
- 좌표의 상하좌우 좌상, 우상, 좌하, 우하 뱡향으로 순회하면서 board 내 영역에 있고 폭탄이 있는 경우 cnt의 수를 증가 시켜서
- 답인 ans좌표에 그 값을 넣는다.
- 눌른 좌표에 폭탄이 있는 경우 mine값을 true로 해서 ans 배열에 폭탄의 위치를 모두 표기 한다.
https://www.acmicpc.net/problem/4396
'코딩테스트 > 문제풀이-2' 카테고리의 다른 글
[선택] 1026 보물 [정렬][그리디] (0) | 2024.02.14 |
---|---|
[선택] 11650 좌표 정렬하기 [정렬] (0) | 2024.02.08 |
[선택] 2750 수 정렬하기 [정렬] (0) | 2024.02.01 |
[선택] 2563 색종이 [이차원 리스트] (1) | 2024.01.31 |
[필수] 1931 회의실 배정 [정렬][그리디] (0) | 2024.01.30 |
[필수] 2630 색종이 만들기 [이차원 리스트][재귀] (1) | 2024.01.30 |