Level. 0
문제
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return 하도록 solution 함수를 완성해 주세요.
* 제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
풀이
class Solution {
public int solution(int[][] board) {
int answer = 0;
int n = board.length;
int[][] safe = new int[n][n]; // 배열은 0으로 초기화
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(board[i][j] == 1){
safe[i][j] = 1;
if(i>0){
if(j>0) safe[i-1][j-1] = 1;
if(j<n-1) safe[i-1][j+1] = 1;
safe[i-1][j] = 1;
}
if(i<n-1){
if(j>0) safe[i+1][j-1] = 1;
if(j<n-1) safe[i+1][j+1] = 1;
safe[i+1][j] = 1;
}
if(j>0) safe[i][j-1] = 1;
if(j<n-1) safe[i][j+1] = 1;
}
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(safe[i][j] == 0) answer += 1;
}
}
return answer;
}
}
해결방법
1. board와 같은 크기의 safe배열을 만들고 board를 탐색하며, 폭탄이 발견될 경우 인접한 8칸과 폭탄 칸을 safe에 1로 저장한다.
2. 탐색을 마치고 safe배열의 값이 0인칸의 합계를 구하여 리턴한다.
https://school.programmers.co.kr/learn/courses/30/lessons/120866?language=java
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 평행 (0) | 2023.10.25 |
---|---|
[프로그래머스(Java)] 겹치는 선분의 길이 / map.merge() (1) | 2023.10.24 |
[프로그래머스(Java)] 주사위 게임 3 / Collections.sort() (1) | 2023.10.15 |
[프로그래머스(Java)] 연속된 수의 합 (0) | 2023.10.14 |
[프로그래머스(Java)] 분수의 덧셈 / 유클리드 호제법 (0) | 2023.10.14 |