[Lv. 0] 안전지대프로그래머스/Level 02023. 4. 3. 15:29
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120866
난이도 : Level.0
언어 : Kotlin
문제 설명 :
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
제한 사항 :
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예 :
board | result |
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] | 16 |
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] | 13 |
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] | 0 |
다른사람의 풀이 :
class Solution {
fun solution(board: Array<IntArray>): Int {
return board.indices.map { row ->
board[row].indices.filter { board[row][it] == 1 }.forEach { col ->
((row - 1).coerceAtLeast(0)..(row + 1).coerceAtMost(board.lastIndex)).map { row2 ->
((col - 1).coerceAtLeast(0)..(col + 1).coerceAtMost(board.first().lastIndex)).forEach { col2 ->
if (board[row2][col2] == 0) {
board[row2][col2] = 2
}
}
}
}
}.run { board.indices.map { board[it].count { value -> value == 0 } } }.sum()
}
}
이게 코딩테스트 입문 0레벨 난이도...?
살펴보면 확실히 이해하기는 힘들지만,
지뢰(1)를 필터하여 해당 위치 주변의 위험구역을 coerceAtLeast, coerceAtMost 함수를 사용하여 지정하고
위험지역(2)으로 바꾸고 마지막에 run으로 안전지역(0)을 전부 더한 것 같다..
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] 다항식 더하기 (0) | 2023.04.04 |
---|---|
[Lv. 0] 숨어있는 숫자의 덧셈(2) (0) | 2023.04.04 |
[Lv. 0] 삼각형의 완성조건 (2) (0) | 2023.04.03 |
[Lv. 0] 외계어 사전 (0) | 2023.04.03 |
[Lv. 0] 저주의 숫자 3 (0) | 2023.03.31 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!