728x90
✅ 문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return 하도록 solution 함수를 완성해 주세요.
✅ 제한사항
- board는 n * n 배열입니다.
- 1 <= n <= 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
✅ 입출력 예
✅ 문제 풀이
아래와 같은 방식으로 문제를 해결하였다.
- 전체적으로 배열을 순환한다.
- 각 배열의 요소마다 주변의 값을 찾는다.
- 지뢰가 존재한다면 false를 존재하지 않는다면 true를 반환한다.
- 존재하지 않는다면 안전지대라는 얘기이므로 count를 올린다.
class Solution {
public int solution(int[][] board) {
int answer = 0;
int n = board.length;
// 각 배열을 순환
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (isSafe(board, i, j, n)) {
answer++;
}
}
}
return answer;
}
private static boolean isSafe(int[][] board, int x, int y, int n) {
// 주변에 지뢰가 있는지 확인
for (int i=-1; i<=1; i++) {
for (int j=-1; j<=1; j++) {
int nx = x + i;
int ny = y + j;
// 배열의 범위를 넘어가는 곳은 제외
if (nx >= 0 && nx < n && ny >= 0 && ny < n) {
if (board[nx][ny] == 1) {
return false;
}
}
}
}
return true;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level1 - [1차] 비밀지도 (0) | 2024.08.15 |
---|---|
Level0 - 겹치는 선분의 길이 (0) | 2024.07.18 |
코딩 기초 트레이닝 9 (1) | 2023.09.18 |
코딩 기초 트레이닝 8 (0) | 2023.09.15 |
코딩 기초 트레이닝 7 (0) | 2023.09.04 |