[프로그래머스] 120866. 안전지대

김하밍·2024년 4월 6일

알고리즘

목록 보기
18/22

문제 - 프로그래머스 - 120866. 안전지대


어려웠던 점

  1. 1로 표시되어있는 지뢰 지역과 인접한 위험지역은 다른 역할로 분리할 수 있는 방법 찾기 (연속으로 있는 지뢰 지역을 이전의 지뢰 지역의 위험지역이 아닌 또 다른 지뢰지역으로 인식해야 하므로)

  2. 배열 밖을 벗어날 때 ArrayIndexOutofBoundsException 이 발생하지 않고 다음 순회로 넘어가도록 하는 방법 찾기

해결 방법

  1. 인접된 위험지역 X는 모두 2로 표시하기 위해 for문을 작성했지만, 처음과 마지막 행 또는 열에 지뢰가 위치할 때 2로 표시해야 할 위험지역이 배열 밖 범위로 벗어나는 문제가 발생합니다.

(먼저 알아내야 할 것)
현재 위치가 board[i][j] 일 때, 탐색해야 하는 범위는 i-1 ~ i+1, j-1 ~ j+1 입니다.

(첫 번째 방법) Math.max(), Math.min() 메소드 사용
0보다 작은 인덱스가 오면 0을 반환하도록 하고, 배열에서 가장 큰 자리의 인덱스보다 더 큰 값이 오면 배열의 마지막 자리를 반환하도록 설정합니다. 그래서 자기 자신이 아닌지와 이미 1이 채워져있는지를 체크하여 아닐 때만 2로 채웁니다.

(두 번째 방법) continu문 사용
그림으로 그려보았더니 행 또는 열이 첫 줄 이전으로 벗어나는 경우와 마지막 줄 이후로 벗어나는 경우 총 두 가지 경우가 있음을 발견했습니다.

psudo code

if (< 0 ||>= board.length) continue;
if (< 0 ||>= board.length) continue;

위와 같이 continue 키워드를 사용하여 조건문에 해당하면 다음 순회로 넘어가도록 설정했습니다.


참고

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글