개발새발 로그

[JS] 백준 14891 : 톱니바퀴 본문

알고리즘

[JS] 백준 14891 : 톱니바퀴

이즈흐 2023. 7. 6. 21:19

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

 

📋풀이방법

1. 주어진 회전명령을 forEach로 순회한다.

2. 회전하는 톱니바퀴의 3번째 숫자와 오른쪽 톱니바퀴에 7번째 숫자를 비교한다.

3. 회전하는 톱니바퀴의 7번째 숫자와 왼쪽 톱니바퀴에 3번째 숫자를 비교한다.

 

4.비교해서 같지 않으면 같이 회전해야한다.

5.이때 재귀에서 들어갈 때 visited를 통해 이미 한번 회전한 톱니바퀴를 체크해줘야한다. (callback사이즈 문제와 회전했는데 또 회전시킬 수 있으므로)

6. 1일 때와 -1일때를 구분해서 배열을 회전시킨다.

 

🤟내 제출

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim();
input=input.replace(/\r/g,"").split("\n");

let arr=[];
for(var i=0;i<4;i++){
    arr.push(input.shift().split("").map(Number));
}
let n=Number(input.shift());
let rotate=[]
for(var i=0;i<n;i++){
    rotate.push(input.shift().split(" ").map(Number));
}
let visited=Array(4).fill(0);

function spin(num,wh){
    
    let first_R_ro=arr[num][2];
    let first_L_ro=arr[num][6];
    
    if(num!=3 && first_R_ro!=arr[num+1][6]){
        if(visited[num+1]==0){
            visited[num+1]=1;
            spin(num+1,-1*wh);
        }
    }

    if(num!=0 && first_L_ro!=arr[num-1][2]){
        if(visited[num-1]==0){
            visited[num-1]=1;
            spin(num-1,-1*wh);
        }
    }
    
    if(wh==1){
        let temp=arr[num].slice()
        temp.unshift(temp.pop())
        arr[num]=temp
    }
    else if(wh==-1){
        let temp=arr[num].slice()
        temp.push(temp.shift());
        arr[num]=temp
        
    }
}


rotate.forEach((x)=>{
    let [num,wh]=x;
    visited=Array(4).fill(0);
    visited[num-1]=1;
    spin(num-1,wh);
})
let answer=0;
arr.forEach((x,idx)=>{
    if(x[0]==1){
        answer+=2**idx
    }
});
console.log(answer)

 

 

💢어려웠던 점

1. visited를 체크안해줘서 callback사이즈가 넘침

2. visited를 체크안해줘서 회전시켰는데 또 회전시키는 문제가 발생

728x90
반응형
LIST

'알고리즘' 카테고리의 다른 글

[JS] 백준 15683 : 감시  (0) 2023.07.08
[JS] 백준 2573 : 빙산  (0) 2023.07.07
[JS] 백준 12100 : 2048(Easy)  (0) 2023.07.05
[JS] 백준 13460번 : 구술 탈출 2  (0) 2023.07.04
[JS] 백준 16234번 : 인구이동  (0) 2023.07.03