[Programmers] Lv0 안전지대 Java
2023. 1. 27. 23:57ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/120866
문제 풀이
- 위 아래 왼쪽 오른쪽 대각선은 지뢰가 있는 좌표에 X,Y에 + 1, -1 을 각각 해주면 된다. 하지만 이때 배열에 접근할 때 언더 플로우, 오버 플로우가 발생할 수 있으므로 이에 대한 처리를 해주면된다.
- 각 지뢰가 있는 것을 1이라고 했을 때 경고하는 것은 0일때 2로 표현을 했다.
- 위험지역이 아닌 안전지역을 구하는 방법은 위험지역을 표시후 0만 세는 방식으로 하였다.
소스 코드
import java.util.Arrays;
public class Solution {
public int[][] dengerZone(int[][] board, int x, int y) {
for (int j = Math.max(0, y - 1); j <= Math.min(board.length - 1, y + 1); j++)
for (int i = Math.max(0, x - 1); i <= Math.min(board.length - 1, x + 1); i++)
board[j][i] = board[j][i] == 0 ? 2 : board[j][i];
return board;
}
public int solution(int[][] board) {
for (int y = 0; y < board.length; y++)
for (int x = 0; x < board.length; x++)
if (board[y][x] == 1)
board = dengerZone(board, x, y);
return Arrays.stream(board).flatMapToInt(Arrays::stream).map(bordValue -> bordValue == 0 ? 1 : 0).sum();
}
}
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv0 최빈값 구하기 Java (0) | 2023.01.29 |
---|---|
[Programmers] Lv0 분수의 덧셈 Java (0) | 2023.01.28 |
[Programmers] Lv0 겹치는 선분의 길이 Java (0) | 2023.01.26 |
[Programmers] Lv0 평행 Java (0) | 2023.01.25 |
[Programmers] Lv0 n의 배수 고르기 Java (0) | 2023.01.24 |