[Programmers] Lv0 안전지대 Java
2023. 1. 27. 23:57ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
- 위 아래 왼쪽 오른쪽 대각선은 지뢰가 있는 좌표에 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 |