문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120866
제한 사항
입출력 예
풀이
import java.util.ArrayList;
import java.util.HashSet;
class Solution {
public int solution(int[][] board) {
int answer = 0;
ArrayList<Integer> bombList = new ArrayList<>();
HashSet<Integer> result = new HashSet<>();
for (int y = 0; y < board.length; y++)
for (int x = 0; x < board[y].length; x++)
if (board[y][x] == 1) bombList.add(x * 1000 + y);
for (Integer pos : bombList) {
int x = pos / 1000, y = pos % 1000;
for (int i = y - 1; i <= y + 1; i++) {
for (int j = x - 1; j <= x + 1; j++) {
if (i == board.length || i == -1
|| j == board.length || j == -1) continue;
result.add(j * 1000 + i);
}
}
}
answer = board.length * board.length - result.size();
return answer < 0 ? 0 : answer;
}
}
후기
분명 0단계 문제인데... 1단계 같은 기분... 그 증거로 다른 사람 풀이를 보면 엄청난 풀이들을 볼 수 있는데 나는 일단 폭탄의 위치를 리스트를 이용해서 저장해 놓고 폭탄 위치를 순회하면서 3x3 위치가 범위 밖인지 확인 후 범위 안이면 집합에 저장시켜서 자동으로 위치가 겹치는 중복을 제거할 수 있도록 했다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
[프로그래머스][JAVA][Lv. 0] 분수의 덧셈 (0) | 2023.09.03 |
---|---|
[프로그래머스][JAVA][Lv. 0] 연속된 두 수의 합 (0) | 2023.09.02 |
[프로그래머스][JAVA][Lv. 2] N개의 최소공배수 (0) | 2023.08.31 |
[프로그래머스][JAVA][Lv. 0] 겹치는 선분의 길이 (0) | 2023.08.31 |
[프로그래머스][JAVA][Lv. 2] 리코쳇 로봇 (0) | 2023.08.30 |