100세까지 코딩
[프로그래머스] Lv0.안전지대 본문
문제 설명
풀기 전 생각
- 안전지대 : 0, 폭탄 : 1, 위험 지대 : 2로 두기
- 내가 입력하는거면 n*n 이면 (n+1) * (n+1)로 두고 (1,1)부터 시작
- 그러나, 매개변수로 이미 n*n을 받고 있기 때문에
모서리나 경곗값에서는 ArrayIndexOutOfBoundsException가 안 뜨게 처리해 준다
class Solution {
public int solution(int[][] board) {
int answer = 0;
for(int i = 0 ; i < board.length; i++){ //행 순회
for(int j = 0; j < board[i].length; j++){ //열 순회
if(board[i][j] == 1){ // 폭탄이면?
for(int m = i-1; m < i+2; m++){ // 위, 중간, 아래
for(int n = j-1; n < j+2; n++){ // 왼, 중간, 오른
if(m < 0 || n < 0 || m > board.length-1 || n > board.length-1){
continue; // arrayIndex를 넘어갈시 continue;로 넘어가기
}else{
if(board[m][n] != 1){ // 위, 아래, 좌, 우 대각선 칸이 폭탄이 아니면
board[m][n] = 2; // 위험지대로 바꿈
}
}
}
}
}
}
}
for(int i = 0 ; i < board.length; i++){ // 행 순회
for(int j = 0; j < board.length; j++){ // 열 순회
if(board[i][j]==0){
answer++; // 안전지대면 answer+1;
}
}
}
return answer;
}
}
for문이 많아 복잡해 보이지만 Lv0이라 쉬웠다
'코딩테스트 > 자바' 카테고리의 다른 글
[프로그래머스] Lv0.문자열 밀기 (0) | 2023.08.16 |
---|---|
[프로그래머스] Lv0.다항식 더하기 (0) | 2023.08.14 |
[프로그래머스] Lv0.연속된 수의 합 (0) | 2023.08.13 |
[프로그래머스] Lv0.분수의 덧셈 (0) | 2023.08.13 |
[프로그래머스] Lv0.겹치는 선분의 길이 (0) | 2023.08.12 |