<내 풀이> - 못풀었다.
뽑아서 저장하는 것 까지는 어떻게 한거 같은데,
그 후에 중복된걸 제거하는 부분에서 time이 over 되었다.
(중복된걸 제거할 때 [1,2,2,1]의 경우 2,2가 사라지고 1,1도 사라질 수 있는데, 그럴 때 어떻게 구현해야 할 지 감이 안잡힘)
function solution(board, moves) {
var answer = 0;
var samllbox = [];
var box = [];
var moves = moves.map(i => i-1);
for(var i = 0; i<moves.lenght; i++){
for(var j = 0; j<5; j++){
if(board[moves[i]][j]!=0){
var k = [];
k.push(j);
smallbox.push(board[moves[i]][j]);
}
}
box.push(smallbox[0]);
board[moves[i]][k[0]] = 0; //뽑아서 저장하느것까지 했음
}
return answer;
}
<다른 사람 풀이>
function solution(board, moves) {
let result = []; // 바구니
let cnt = 0;
for(let i=0; i<moves.length; i++){
const peek = moves[i]-1;
for(let j=0; j<board.length; j++){
if( board[j][peek] === 0 ) continue;
else{
const lastLength = result.length <= 1 ? 0 : result.length-1;
if(result[lastLength] === board[j][peek]){
board[j][peek] = 0;
result.splice(lastLength);
cnt += 2;
}
else{
result.push(board[j][peek]);
board[j][peek] = 0;
}
break;
}
}
}
return cnt;
}
전형적인 [2차원 배열 뽑기 문제]라고 함.
for문 두개 돌리고 if 문으로 조건 확인하는 거 까지의 흐름은 문제 없었음.
for 문에서 j = 0 부터 시작하면 위에서부터 뽑기 때문에 굳이 새로운 배열에 저장해놓을 필요없고,
뽑은걸 바로 box에 넣으면서 이미 들어간 것과 비교해서 같으면 지우면 됨.
우려했던 [1,2,2,1] 같은 경우에도 예외처리를 안해줘도 되는게,
어차피 하나씩 넣기 때문에 2,2가 만들어질 때 box에서 최근 2개 지우도록 하면 [1]만 남게 됨.
for 문 break 걸어서 맨위에거 나오고 box 처리까지 하고 나서는 종료되도록 하는 부분이 point.
'주5일알고리즘' 카테고리의 다른 글
Programmers : 음양 더하기 with JS (0) | 2022.07.20 |
---|---|
Programmers : 없는 숫자 더하기 with JS (0) | 2022.07.07 |
Programmers: 키패드 누르기 with JS (0) | 2022.07.04 |
Programmers: 숫자 문자열과 영단어 with JS (0) | 2022.07.01 |
Programmers: 신규 아이디 추천 with JS (1) | 2022.06.30 |