Programmers | 코딩테스트 입문 - 안전지대(자바)
2023. 4. 4. 14:16ㆍ공부/Programmers
프로그래머스 Lv.0 안전지대
JAVA
import java.util.*;
class Solution {
public int solution(int[][] board) {
int answer = 0;
int[][] targetBoard = new int[board.length][board.length]; // 새로운 보드
for(int i=0; i<board.length; i++){
for(int j=0; j<board.length; j++){
if(board[i][j] == 1) getTarget(i,j,targetBoard);
}
}
for(int[] arr : targetBoard){
for(int val : arr){
if(val == 0) answer++;
}
}
return answer;
}
public void getTarget(int x, int y, int[][] targetBoard){ //지뢰 인접한 지역도 1 처리
int max = targetBoard.length;
int[] chkX = {0,-1,-1,-1,0,0,1,1,1};
int[] chkY = {0,-1,0,1,-1,1,-1,0,1};
int newX;
int newY;
for(int i=0; i<9; i++){
newX = x + chkX[i];
newY = y + chkY[i];
if((newX < max && newX >= 0) && (newY < max && newY >= 0)){
targetBoard[newX][newY] = 1;
}
}
}
}
지뢰를 기준으로 (-1,-1) / (-1,0) / (-1,1) / (0,-1) / (0,1) / (1,-1) / (1,0) / (1,1) 곳이 위험지역이다.
따라서 getTarget함수에서 해당 위치를 1로 지정하고, 새로운 보드이므로 지뢰 위치(0,0)도 1로 세팅한다.
여기서 주의할 점은 newX,newY값이 0보다 작으면 안되고, board 길이보다 크면 안된다.
(board는 n x n 이므로 board.length로만 체크해도 된다.)
getTarget함수에서 설정한 targetBoard를 순차적으로 돌면서 해당 위치의 값이 0인 경우에만 answer값을 1씩 올리면
안전지역의 수를 구할 수 있다.
'공부 > Programmers' 카테고리의 다른 글
Programmers | 코딩테스트 연습 - 약수의 개수와 덧셈(자바) (0) | 2023.04.21 |
---|---|
Programmers | 코딩테스트 입문 - 겹치는 선분의 길이(자바) (0) | 2023.04.04 |
Programmers | 코딩테스트 입문 - 문자열 계산하기(자바,파이썬), eval (0) | 2023.01.06 |
Programmers | 코딩테스트 입문 - 소인수분해(자바) (0) | 2023.01.05 |
Programmers | 코딩테스트 입문 - 한 번만 등장한 문자(자바,파이썬), HashMap key값으로 정렬하기 (0) | 2023.01.04 |