오늘부터 Lv0 문제도 차근차근 푸는 연습을 하려고 합니다
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
board result
[[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]] | 16 |
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] | 13 |
[[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]] | 0 |
입출력 예 설명
입출력 예 #1
- (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.
입출력 예 #2
- (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.
입출력 예 #3
- 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.
문제 해석
폭탄이 있는 곳은 1로 표시되며 8방향(동, 서, 남, 북, 동서, 동남, 북서, 북남)으로는 안전하지 않은 지역입니다.
지도에서 안전한 지역의 개수를 반환하면 됩니다.
* 구현 로직 *
1. 지도에서 1(폭탄)을 찾고 개수를 카운팅합니다.
2. 폭탄의 위치에서 8방향을 찾아 개수를 카운팅해줍니다. 만일 폭탄의 위치에서 8방향을 찾을 때 지도의 인덱스로 0보다 작거나 배열의 길이보다 넘을 경우는 패스해줍니다.
3. 지도의 총 개수에서 카운팅한 개수를 빼줍니다.
코드
class Solution {
public int solution(int[][] board) {
int answer =0;
int N = board.length;
int[][] newBoard = new int[N][N];
for(int i =0; i< N; i++){
for(int j=0; j< N; j++){
if(board[i][j]==1){
checkExplosion(i, j, newBoard);
}
}
}
for(int[] row: newBoard){
for(int col:row){
if(col == 1){
answer++;
}
}
}
return N*N - answer;
}
public static void checkExplosion(int x, int y, int[][] newBorad){
int explosionX;
int explosionY;
int[] dx = {0, -1, -1, -1, 0, 0, 1, 1, 1};
int[] dy = {0, 1, 0, -1, 1, -1, 1, 0, -1};
for(int i =0; i<9; i++){
explosionX = x + dx[i];
explosionY = y + dy[i];
if(explosionX < newBorad.length && explosionY < newBorad.length
&& explosionX >= 0 && explosionY >= 0){
newBorad[explosionX][explosionY] = 1;
}
}
}
}
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv2] 순위 검색 (0) | 2023.11.23 |
---|---|
[프로그래머스 Lv2] 행렬 테두리 회전하기 (1) | 2023.11.22 |
[자바 Lv0] 전국 대회 선발 고사 (0) | 2023.07.30 |
[프로그래머스 Lv.1] 개인정보 수집 유효기간 (0) | 2023.06.13 |
[프로그래머스 Lv1] 같은 숫자는 싫어! (0) | 2023.06.13 |