인프런 커뮤니티 질문&답변
코드리뷰 부탁드립니다
작성
·
233
·
수정됨
0
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(board, moves) {
let answer = 0;
let stack = [];
for (let j = 0; j < moves.length; j++) {
stack.push(board[moves[j] - 1].pop());
if (stack[stack.length - 1] === 0) {
stack.pop();
}
if (
stack.length >= 2 &&
stack[stack.length - 1] === stack[stack.length - 2]
) {
stack.pop();
stack.pop();
answer += 2;
}
}
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>답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
손성오님의 코드에 대해서 몇 가지 조언을 드리겠습니다.
pop()함수는 배열의 마지막 요소를 제거하고 그 요소를 반환합니다. 그러나 여기서는 보드의 열을 나타내는 배열에서 아이템을 제거하는 것이 목적이므로, 정확하게는 특정 열의 마지막이 아니라 해당 열에서 가장 위에 있는(0이 아닌 첫 번째 요소) 아이템을 제거해야 합니다. 따라서pop()대신에 해당 열을 순회하면서 0이 아닌 첫 번째 요소를 찾아서 처리해야 합니다.이런 방식으로 코드를 변경하면,
board[moves[j] - 1].pop()부분은 적절한 아이템을 제거하고 해당 아이템을stack에 추가하는 로직으로 바꿔야 합니다.또한, 코드의 가독성을 높이기 위해 각 단계별로 주석을 추가하는 것도 좋은 방법입니다. 그렇게 하면 다른 사람이 코드를 읽을 때 의도를 더 쉽게 이해할 수 있습니다.
구현한 로직에 문제가 없는지 여러 경우에 대해 철저하게 테스트해 보시는 것도 중요합니다. 예를 들어, 여러 엣지 케이스를 고려하여
a,b배열을 다양하게 바꿔가면서 실행해보고 올바른 결과가 나오는지 확인하세요.
아래는 수정된 예제 코드 일부를 보여드리겠습니다.
function solution(board, moves) {
let answer = 0;
let stack = [];
for (let j = 0; j < moves.length; j++) {
const col = moves[j] - 1;
// 해당 열에서 0이 아닌 첫 번째 요소를 찾아 stack에 추가하고, 그 위치의 요소를 0으로 변경
for (let i = 0; i < board.length; i++) {
if (board[i][col] !== 0) {
stack.push(board[i][col]);
board[i][col] = 0;
// 인형이 터지는 조건 체크 및 처리
if (stack.length >= 2 &&
stack[stack.length - 1] === stack[stack.length - 2]) {
stack.pop();
stack.pop();
answer += 2;
}
break; // 아이템을 찾았으니 더 이상의 검사는 필요 없음
}
}
}
return answer;
}
이 예제는 여러분의 코드에 기반한 것이며, 정확한 실행을 위해서는 전체 코드를 적절하게 수정하고 테스트해야 합니다.
감사합니다.





