Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준구현
- dp알고리즘
- 백준골드
- 다이나믹프로그래밍
- 리액트커뮤니티
- 프로그래머스코테
- 코딩테스트
- js코테
- 백준
- 알고리즘
- JS
- 안드로이드 스튜디오
- 리액트
- css기초
- 프로그래머스
- JS프로그래머스
- CSS
- 몽고DB
- 자바스크립트
- 익스프레스
- 백준알고리즘
- HTML5
- 코테
- 백준js
- 백준nodejs
- 백준구현문제
- HTML
- 프로그래머스JS
- 리액트댓글기능
- 포이마웹
Archives
- Today
- Total
개발새발 로그
[JS] 백준 14891 : 톱니바퀴 본문
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 |