1. 문제
2. 전략
1) 지뢰의 좌표를 찾는다.
2) 지뢰의 좌표로부터 상하좌우 8칸이 0이라면 'x'로 바꾼다 (지뢰가 여러개일수 있으므로 1이면 그대로 1로 둔다.)
3) 만약 지뢰가 좌상끝/좌끝/좌하끝/우상끝/우끝/우하끝/상끝/하끝 인 경우를 고려해야한다.
4) * 풀이 도중 board[삼항연산자][삼항연산자] 의 방법에 오류가 있어 별도의 함수를 만들어 풀었다.
function solution(board) {
var answer = 0;
let n = board.length-1;
// board는 어떤수x어떤수의 정사각형 형태이므로
// let n = board의 요소의 마지막index혹은 board의 마지막index
let ifNeg = (a)=>{
// ifNeg는 파라미터 자신이 음수면 0이되고, 아니면 -1 해주는 함수(index가 음수가 되지 않도록 조정)
if(a === 0){
a = 0;
}
else{
a = a-1
}
return Number(a)
}
let ifPos = (a,n)=>{
// ifPos는 파라미터 자신이 n과 같으면 n이되고, 아니면 +1 해주는 함수(index가 배열의 마지막index를 넘지 않도록)
if( a === n){
a = n
}
else{
a = a+1;
}
return Number(a)
}
for(i in board){
for(j in board){ //2차원배열 순회
if(board[i][j] === 1){ //i,j에 지뢰가 있는 경우 실행
i = Number(i);
j = Number(j);
// 지뢰가 각 부분 끝에 있는 경우를 고려하여 index가 음수 혹은 마지막index를 넘지 않도록
// 앞에서 정의한 함수를 이용하여 범위를 조정해준다.
board[ifNeg(i)][ifNeg(j)] === 0 ? board[ifNeg(i)][ifNeg(j)] = 'x' : null;
board[i][ifNeg(j)] === 0 ? board[i][ifNeg(j)] = 'x' : null;
board[ifPos(i,n)][ifNeg(j)] === 0 ? board[ifPos(i,n)][ifNeg(j)] = 'x' : null;
board[ifNeg(i)][j] === 0 ? board[ifNeg(i)][j] = 'x' : null;
board[ifPos(i,n)][j] ===0 ? board[ifPos(i,n)][j] = 'x' : null;
board[ifNeg(i)][ifPos(j,n)] ===0 ? board[ifNeg(i)][ifPos(j,n)] = 'x' : null;
board[i][ifPos(j,n)] ===0 ? board[i][ifPos(j,n)] = 'x' : null;
board[ifPos(i,n)][ifPos(j,n)] ===0 ? board[ifPos(i,n)][ifPos(j,n)] = 'x' : null;
// 지뢰 주변의 값이 0이라면 'x'로 변환해주고, 아니면 null
}
}
}
let allCount = 0; //전체 0의 개수 카운트
for(k in board){
for(l in board){ // 순회하면서 카운팅해준다.
if(board[k][l] === 0){
allCount++
}
}
}
return allCount;
}
3. 알아야할 사항
1) 삼항연산자
- (조건문) ? (조건문이true면 실행) : (아니라면 실행)
- 간단하게 한줄로 if else문을 작성할 수 있는 축약문법이다.
- 중첩도 가능하다. React에서 jsx내부에는 if문을 사용할 수 없으므로 if문 대신에 자주 쓴다.
- 가독성이 똥이므로 잘 생각해서 if else 많이 쓰자.
'ComputerScience > 알고리즘, 프로그래머스' 카테고리의 다른 글
[LV.1] 정수 제곱근 판별 (Math.sqrt(), Number.isInteger() (0) | 2023.01.31 |
---|---|
[Lv.0] 정복기념 (0) | 2023.01.30 |
[Lv.0] 평행(복잡한 계산문제에서의 전략) (0) | 2023.01.30 |
[Lv.0] 외계어 사전 (0) | 2023.01.30 |
[Lv.0] 영어가 싫어요(.replaceAll()) (0) | 2023.01.30 |
댓글