알고리즘 #100

Jaewoong2·2020년 8월 29일
0

알고리즘공부

목록 보기
9/35



출처 : 제주코딩베이스켐프 JAVASCRIPT 알고리즘 100제 - 100번


const puzzles = [
    [0,0,0,0],
    [0,1,0,3],
    [2,5,0,1],
    [2,4,4,1],
    [5,1,1,1]
]

const controls = [1,1,1,1,3,3,3];
const length = controls.length;
const stack = [];
let score = 0;

for(let i = 0; i < length; i++) {
    const control = controls[i];
    const rowArr = [];
    puzzles.forEach((row, rowIndex) => {
        row.forEach((col, colIndex) => {
            if(colIndex === control - 1) {
                if(col) {
                    rowArr.push(rowIndex)
                }
            }
        })
    })
    
    if(rowArr.length > 0) {
        const ball = puzzles[rowArr[0]][control - 1];
        if(ball) {
            if(stack[stack.length - 1] === ball) {
                stack.push(ball);
                stack.splice(stack.length - 2, 2)
                console.log(`${ball * 2}점 획득!`)
                score = score + (ball * 2);
            } else {
                stack.push(ball);
            }
            puzzles[rowArr[0]].splice(control - 1, 1, 0)
        }
    } else {
        console.log(`1점 마이너스!`)
        score = score - 1;
    }
}
console.log(stack, score)
  • 조작하는 값 (controls[0] or contols.shift()) 과 퍼즐의 칸(col)의 index 값과 같고, 그 칸에 있는 값이 0이 아니면 점수 칸stack에 넣어준다.

  • 주의해야할 점은, 퍼즐을 2중배열을 돌릴 때, contorls.shift() === col 일 때, 그 col 값을 stack에 넣고 col 값을 0으로 바꿔주면 그 관련 colIndex 모두가 0으로 바뀌고 stack에 넣어진다. 이걸 방지해야할 필요가 있다.

  • 그래서 사용한 방법은 퍼즐에서 control의 인덱스와 관련된 값중에서 가장 낮은 rowIndex를 갖고 있는것을 갖고와서 그것을 이용하는 것이다.

profile
DFF (Development For Fun)

0개의 댓글