나는 이 문제를 보고, 왜인지 모르게 완전탐색을 생각했다.(dfs, bfs) 폭탄인 부분의 주위를 안전하지 않은 상태(2)로 만들고 다음 0의 개수를 확인하고자 했다. 그런데 이는 너무 과하다는 생각이 들었다. 그리고 무엇보다 내가 풀이에 잘못 접근했었다..
지피티의 도움을 받아 해당 문제는 다음과 같이 풀이하였다.
- 폭탄이 있는 지역(1)이면 다음 칸으로 넘어가고, 폭탄이 아닌 칸(0)이라면, 현 위치를 기준으로 9방면을 확인했다.
- 범위를 벗어나거나, 주변의 값이 폭탄이 있는지역(1)이라면, 해당 지역을 안전하지 않는 지역으로 판단했다.
class Solution {
fun solution(board: Array<IntArray>): Int {
val n = board.size
val dx = intArrayOf(-1, 1, 0, 0, -1, -1, 1, 1)
val dy = intArrayOf(0, 0, -1, 1, -1, 1, -1, 1)
var safeAreaCount = 0
for (i in 0 until n) {
for (j in 0 until n) {
if (board[i][j] == 1) {
continue
}
var isSafe = true
for (k in 0 until 8) {
val nx = i + dx[k]
val ny = j + dy[k]
if (nx in 0 until n && ny in 0 until n && board[nx][ny] == 1) {
isSafe = false
break
}
}
if (isSafe) {
safeAreaCount++
}
}
}
return safeAreaCount
}
}
728x90
'개인공부 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 다항식 더하기 (Kotlin) (0) | 2023.07.27 |
---|---|
프로그래머스 - 숨어있는 숫자의 덧셈(2) (Kotlin) (0) | 2023.07.27 |
프로그래머스 - 외계어 사전 (Kotlin) (0) | 2023.07.24 |
프로그래머스 - 문자열 정렬하기(2) (Kotlin) (0) | 2023.07.24 |
프로그래머스 - 7의 개수 (Kotlin) (0) | 2023.07.24 |