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 | 29 | 30 | 31 |
Tags
- CSS
- 코딩테스트
- 코테
- 백준알고리즘
- 익스프레스
- 리액트
- 백준골드
- 알고리즘
- 프로그래머스
- 백준
- 자바스크립트
- dp알고리즘
- HTML
- 몽고DB
- JS
- HTML5
- 백준구현문제
- 포이마웹
- JS프로그래머스
- 리액트커뮤니티
- 리액트댓글기능
- 백준구현
- js코테
- 다이나믹프로그래밍
- css기초
- 프로그래머스코테
- 안드로이드 스튜디오
- 프로그래머스JS
- 백준js
- 백준nodejs
Archives
- Today
- Total
개발새발 로그
[JS] 백준 14499번 : 주사위 굴리기 본문
https://www.acmicpc.net/problem/14499
📋풀이방법
1. 가로와 세로 부분, 그리고 가로와세로가 겹치는 윗 부분과 아랫부분을 각각 배열 과 상수로 변수에 저장한다.
-이유는 주사위가 계속 굴러갈 때 윗 부분과 아랫부분은 어디에 속해있지않고 계속해서 바뀐다.
-하지만 동쪽과 서쪽, 북쪽과 남쪽부분은 굴려도 어디에 영향을 받지 않고 윗부분의 숫자와 아랫부분의 숫자로 정해진다.
2. 이를 통해 문제에서 주어진 구르는 명령을 구분해서 각각 top과 floor <-> NS 혹은 WE 배열의 값들을 서로 바꾸면 된다.
3. 이때 각각 명령에 따라 서로 바꾸고 난 뒤 지도의 x,y부분이 0이면 floor값으로 바꿔주고,
4. x,y부분이 0이 아니면 floor의 값을 다시 x,y에 있는 값으로 바꾸고 x,y는 0으로 바꿔야한다.
🤟내 제출
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 t_arr=input.shift().split(" ").map(Number);
let N=t_arr[0];
let M=t_arr[1];
let [x,y]= [t_arr[2],t_arr[3]];
let K=t_arr[4];
let arr=[];
for(var i=0;i<N;i++){
arr.push(input.shift().split(" ").map(Number));
}
let go=input.shift().split(" ").map(Number)
let WE=[0,0];
let NS=[0,0];
let floor=0;
let top=0;
let answer=[];
go.forEach((cir)=>{
if(cir==1 && y+1<M){
y++;
let [temp_top,temp_floor]=[top,floor];
top=WE[1];
floor=WE[0];
[WE[0],WE[1]]= [temp_top,temp_floor];
if(arr[x][y]==0) arr[x][y]=floor;
else {
floor=arr[x][y];
arr[x][y]=0;
}
answer.push(top);
}
else if(cir==2 && y-1>=0){
y--;
let [temp_top,temp_floor]=[top,floor];
top=WE[0];
floor=WE[1];
[WE[1],WE[0]]= [temp_top,temp_floor];
if(arr[x][y]==0) arr[x][y]=floor;
else {
floor=arr[x][y];
arr[x][y]=0;
}
answer.push(top);
}
else if(cir==3 && x-1>=0){
x--;
let [temp_top,temp_floor]=[top,floor];
top=NS[1];
floor=NS[0];
[NS[0],NS[1]]= [temp_top,temp_floor];
if(arr[x][y]==0) arr[x][y]=floor;
else {
floor=arr[x][y];
arr[x][y]=0;
}
answer.push(top);
}
else if(cir==4 && x+1<N){
x++
let [temp_top,temp_floor]=[top,floor];
top=NS[0];
floor=NS[1];
[NS[1],NS[0]]= [temp_top,temp_floor];
if(arr[x][y]==0) arr[x][y]=floor;
else {
floor=arr[x][y];
arr[x][y]=0;
}
answer.push(top);
}
});
console.log(answer.join("\n"));
💢어려웠던 이유
1. 풀이방법은 빠르게 접근했고, 풀이도 완성했지만 문제의 조건인 x,y부분이 0일때의 조건을 생각하지 않았다.
-이를 수정하는 과정에서 floor 값은 일단 NS혹은 WE의 값중 하나로 저장해놓고 0일때의 조건을 생각해야했는데 그 코드를 추가하지 않았다.
728x90
반응형
LIST
'알고리즘' 카테고리의 다른 글
[JS] 백준 13460번 : 구술 탈출 2 (0) | 2023.07.04 |
---|---|
[JS] 백준 16234번 : 인구이동 (0) | 2023.07.03 |
[JS] 백준 16236 : 아기상어 (0) | 2023.07.01 |
[JS] 백준 3190번 : 뱀 (0) | 2023.06.30 |
[JS] 백준 5430번 : AC (0) | 2023.06.29 |