CODING TEST

프로그래머스 - 안전지대

우진하다 2023. 5. 17. 22:48

시뮬레이션.

작은 의미로 문제가 제시한 규칙에 따라 구현하는 문제
예) 로봇청소기 이동, 지뢰찾기 등

안전지대.

 

나의 풀이.

매개변수로 들어오는 2차원배열 board에 1이 들어간 인덱스의 위치를 찾고
그때 인덱스 값 행 i, 열 j 의 12시 / 1시 / 3시 / 5시 / 6시 / 7시 / 9시 / 11시 방향의 행 과 열의 배열을 만들어
임시값으로 쓰일 행 i, 열 j 의 변수를 만들어 인덱스 마다 더해주고 더한 위치의 값이 0인 경우 -1 (중복 방지 0, 1 외 수로)로 바꿔준다. 
그리고 정답은 0의 갯수를 반환해야 하기 때문에
처음에 answer를 board의 모든 칸을 할당해주고 1을 찾았을 경우와 0을 1로 바꿔줬을 때 answer-- 해준다.

package day016;

import java.util.Arrays;

public class SimulationTest3 {
    public static void main(String[] args) {
        int[][] arr = {
                {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}
        };
        System.out.println(solution(arr));
        int[][] arr1 = {
                {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}
        };
        System.out.println(solution(arr1));


    }

    public static int solution(int[][] board) {
        int answer = board.length * board.length;
        // 행, 열의 시계 방향에 따른 위치 변동 배열
        int[] rows = {-1, -1, 0, 1, 1, 1, 0, -1};
        int[] columns = {0, 1, 1, 1, 0, -1, -1, -1};

        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                if (board[i][j] == 1) {
                    answer--; // 1 하나 발견 변경
                    for (int k = 0; k < rows.length; k++) {
                        int row = i + rows[k];
                        int col = j + columns[k];
                        if (row >= 0 && row < board.length && col >= 0
                                && col < board[i].length && board[row][col] == 0) {
                            answer--;
                            board[row][col] = -1;
                        }
                    }
                }
            }
        }
        return answer;
    }
}

이게 Lv0.이라니!!!!!!! 아직 많이 어렵다..