티스토리 뷰

반응형

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 더해주고 값을 반환한다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함
반응형