시뮬레이션.
작은 의미로 문제가 제시한 규칙에 따라 구현하는 문제
예) 로봇청소기 이동, 지뢰찾기 등
안전지대.
나의 풀이.
매개변수로 들어오는 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.이라니!!!!!!! 아직 많이 어렵다..
'CODING TEST' 카테고리의 다른 글
프로그래머스 - x만큼 간격이 있는 n개의 숫자 (0) | 2023.05.19 |
---|---|
프로그래머스 - 공원 산책 (0) | 2023.05.18 |
프로그래머스 - 완주하지 못한 선수 (0) | 2023.05.16 |
프로그래머스 - 짝수와 홀수 (0) | 2023.05.16 |
백준 10807번 - 개수 세기 (0) | 2023.05.15 |