📌강의 정리
forEach와 반복문을 사용해서 주어진 2차원 배열에서 0이 아닐때까지 반복했다가
0이 아니면 그 숫자를 stack에 넣어주되 넣기전에 그 숫자가 stack에 쌓여있던 숫자와
같은지 비교하고 같으면 answer+=2하고 아니면 그냥 stack에 넣어준다.
📌느낀점
이번문제는 문제의 이해에서 두번 돌아갔다.
알고리즘 또한 막 어려운건 없지만 세세하게 까다로운 조건들이 있었으며
그래서 시간이 조금 오래걸린것같다..
forEach를 썼다면 조금 더 편했을 수 있었기에 항상 메서드들을 잘 활용할 줄 알아야겠다.
//나의코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(board, moves) {
let answer = 0;
let stack = [];
let len = board.length;
let newBoard = [];
let tmp = [];
let tmp2 = 0;
for (let i = 0; i < len; i++) {
for (let j = len - 1; j >= 0; j--) {
tmp.push(board[j][i]);
}
newBoard.push(tmp);
tmp = [];
}
console.log(newBoard);
for (let x of moves) {
while (tmp2 === 0) {
tmp2 = newBoard[x - 1].pop();
}
if (stack[stack.length - 1] === tmp2) {
stack.pop();
answer += 2;
tmp2 = 0;
continue;
} else {
if (tmp2 == undefined) {
tmp2 = 0;
continue;
}
stack.push(tmp2);
tmp2 = 0;
}
}
return answer;
}
//움직임은 이미 모두 결정되어져 있다.
//결과를 도출해내야 한다.
//주어진 배열을 다시 편집하기 쉽게 재구성한다.
//이중 반복을 이용해서 처음 반복은 a[0]의 길이만큼 반복하고
//두번째 반복은 a의 길이만큼 반복하며 이때 끝에서부터 0으로 오는 식으로
//배열을 만들어 주어야 한다.
//이 배열이 다 만들어지면 이 배열을 바탕으로 stack에 push와 pop을 반복하여 문제를 해결한다.
let a = [
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1],
];
let b = [1, 5, 3, 5, 1, 2, 1, 4];
console.log(solution(a, b));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(board, moves) {
let answer = 0;
let stack = [];
moves.forEach((pos) => {
for (let i = 0; i < board.length; i++) {
if (board[i][pos - 1] !== 0) {
let tmp = board[i][pos - 1];
board[i][pos - 1] = 0;
if (tmp === stack[stack.length - 1]) {
stack.pop();
answer += 2;
} else stack.push(tmp);
break;
}
}
});
return answer;
}
let a = [
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1],
];
let b = [1, 5, 3, 5, 1, 2, 1, 4];
console.log(solution(a, b));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 6. 자료구조(스택, 큐)' 카테고리의 다른 글
6.공주구하기(큐) (0) | 2022.06.27 |
---|---|
5.쇠막대기(스택) (0) | 2022.06.26 |
4.후위식 (postfix) 연산(스택) (0) | 2022.06.25 |
2.괄호 문자 제거(스택) (0) | 2022.06.23 |
1.올바른 괄호(스택) (0) | 2022.06.22 |