문제설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return 하도록 solution 함수를 완성해 주세요.
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예 & 설명
입출력 예 #1
- (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return 합니다.
입출력 예 #2
- (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return 합니다.
입출력 예 #3
- 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return 합니다.
나의 풀이
먼저 board와 같은 길이의 배열을 Array 함수와 fill() 함수를 이용해서 0으로 채운 배열을 생성해 줍니다.
그 후 지뢰가 있는 지역 좌, 우, 위, 아래, 대각선은 위험지역이기 때문에 위험지역의 위치를 dir배열에 저장합니다.
그리고 2차원 배열이기 때문에 이중 for문을 이용하는 데 배열을 순회하면서 만약 1이 발견된다면 지뢰가 심어져 있다는 것을 의미하기 때문에 1을 넣어줍니다.
지뢰가 심어져 있는 지역의 위치를 forEach문을 사용하여 앞서 정의한 위험지역의 위치 dir을 더해주면 위험지역이 되고, 해당 위험지역을 1을 더해주어 표시를 해줍니다.
이때 주의해야 할 점은 13번째 줄의 if문입니다.
만약에 위 그림처럼 0번째 행에 지뢰가 있다면 왼쪽, 왼쪽 위 대각선, 왼쪽 아래 대각선이 위험지역이 될 텐데 그러면 음수가 되기 때문에 board의 범위를 넘어서기 때문이고, 두번째로 맨 끝의 board에 지뢰가 있다면 마찬가지로 오른쪽, 오른쪽 위 대각선, 오른쪽 아래 대각선이 위험지역이 되는데 역시 board의 범위를 넘어서기 때문입니다.
풀이를 마저 설명하자면 마지막으로 똑같이 2차원 배열을 접근하기 위해 두 개의 for문을 사용하여 배열의 각요소에 접근하고 만약에 해당 요소가 0이면 안전지대 cnt를 증가시켜 해당 cnt를 반환하여 마무리했습니다.
다른 풀이
다른 풀이에서는 "나의 풀이"와 비슷한 맥락으로 풀었지만, 중복 값을 제거하기 위해 Set형을 사용하였습니다.
겹치는 위험지역을 제거했기 때문에 return문에서 원래의 배열에서 위험지역의 size를 반환하여 마무리했습니다.
"나의 풀이"에서는 반복문을 많이 사용했기 때문에 Set형을 사용한 위와 같은 코드가 좀 더 속도가 빠를 것 같습니다.
코드에서 사용한 개념 알아보기 ✅
[JavaScript] 반복문(loop) 정리 for / for in / for of / foreach
JavaScript의 반복문은 특정 작업을 반복적으로 할 때 사용할 수 있는 구문입니다. 가장 전형적인 for문을 시작으로 다양한 종류의 반복문들이 있습니다. 각 반복문마다 장점이 있고, 성능 또한 차
pixx.tistory.com
[JavaScript] Set 알아보기
set() 이란? Set은 수학적 집합을 표현하기 위해 ES6에 새롭게 추가된 고유한 값들의 집합을 다루는 자료구조입니다. 따라서 수학적 집합의 합집합, 여집합, 교집합, 차집합 등을 구현할 수 있습니
pixx.tistory.com
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 평행 (JavaScript) (0) | 2024.03.13 |
---|---|
[프로그래머스] 특이한 정렬(JavaScript) (1) | 2024.03.12 |
[프로그래머스] 유한소수 판별하기 (JavaScript); (0) | 2024.03.09 |
[프로그래머스] 다항식 더하기 (JavaScript) (0) | 2024.03.07 |
[프로그래머스] 저주의 숫자 3 (JavaScript) (1) | 2024.02.28 |