티스토리 뷰
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
풀이
class Solution {
fun solution(board: Array<IntArray>): Int {
var answer: Int = 0
for(i in 0 until board.size) {
for(j in 0 until board[i].size) {
if(board[i][j] == 1) {
boomPoint(board, i, j)
}
}
}
board.forEach { it ->
answer += it.filter { i ->
i == 0
}.count()
}
return answer
}
fun boomPoint(board: Array<IntArray>, row: Int, col: Int) {
val frowRow = if(row - 1 < 0) row else row - 1
val toRow = if(row + 1 >= board.size) row else row + 1
val fromCol = if(col - 1 < 0) col else col - 1
val toCol = if(col + 1 >= board.size) col else col + 1
for(i in frowRow..toRow) {
for(j in fromCol..toCol) {
if(board[i][j] == 0) {
board[i][j] = -1
}
}
}
}
}
만약 원소 값이 1인 경우, boomPoint 함수를 호출하여 인접한 0 값들을 -1로 변경한다.
boomPoint 함수는 board 배열과 행(row)과 열(col)의 인덱스 값을 입력받아, 해당 위치의 인접한 0 값을 -1로 변경하는 작업을 수행한다.
먼저, 현재 위치의 상하좌우를 나타내는 인덱스 값을 계산한다. 이 때, 배열의 범위를 벗어날 경우에는 현재 위치의 인덱스 값 그대로 사용한다.
그리고 반복문을 사용하여 인접한 0 값을 -1로 변경한다.
이렇게 지뢰가 있는 곳을 기준으로 모든 0 값을 -1로 변경한 후, 마지막으로 forEach 함수와 count 함수를 사용하여 board 배열 내에서 0인 값(지뢰가 없는 곳)의 개수를 세고, answer 에 더해주고 값을 반환한다.
반응형
'Algorithm > programmers_lv0' 카테고리의 다른 글
프로그래머스 lv0 유한소수 판별하기 (Kotlin) (0) | 2023.05.03 |
---|---|
프로그래머스 lv0 등수 매기기 (Kotlin) (0) | 2023.05.02 |
프로그래머스 lv0 저주의 숫자3 (Kotlin) (0) | 2023.05.01 |
프로그래머스 lv0 특이한 정렬 (Kotlin) (0) | 2023.04.30 |
프로그래머스 lv0 옹알이(1) (Kotlin) (0) | 2023.04.28 |
댓글