로직
- 입력은 동작에 관한 정보뿐
- 맵 크기를 모르기에 시작 좌표를
[51,51]
부터 시작하여 명령에 따라 이동하는 좌표를 기록- 51,51인 이유는 동작이 총 50번이 일어나기에 0보다 작은 값이 안나오게 하기 위함
- 좌표 기록을 row는 1000을 곱하여
1000*r + c
형태로 기록
- 이후 기록된 좌표를 기준으로 맵을 그리는 방식
const solution = (commands)=>{
const positionSet = (commands)=>{
let [minRow,maxRow,minColumn,maxColumn] = [51,51,51,51];
const dr = [1,0,-1,0];
const dc = [0,-1,0,1];
let [r,c,d] = [51,51,0];
const position = new Set([51051]);
for (const commnad of commands){
switch (commnad) {
case 'F':
[r,c] = [r+dr[d],c+dc[d]];
position.add(r*1000+c)
switch (d){
case 0:
maxRow = Math.max(maxRow,r);
break;
case 1:
minColumn = Math.min(minColumn,c);
break;
case 2:
minRow = Math.min(minRow,r);
break;
case 3:
maxColumn = Math.max(maxColumn,c);
break
};
break;
case 'R':
d = (d+1)%4;
break;
case 'L':
d = (d+3)%4;
break;
};
}
return [minRow,maxRow,minColumn,maxColumn,position];
}
const [minRow,maxRow,minColumn,maxColumn,position] = positionSet(commands);
const [R,C] = [maxRow-minRow+1,maxColumn-minColumn+1];
const arr = Array.from({length:R},()=>Array.from({length:C}).fill('#'));
for (const num of position){
const [r,c] = [Math.floor(num/1000)-minRow,num%1000-minColumn];
arr[r][c] = '.';
}
return arr;
}
const fs = require("fs");
const URI = process.platform === 'linux'? 0:'./1347.txt';
const [C,commands] = fs.readFileSync(URI,'utf-8').toString().trim().split('\n');
const ans = solution(commands)
ans.forEach((arr)=>console.log(arr.join('')));
풀면서 든 생각
처음에는
100*100
크기의 배열에서 50,50에서 시작하여 이동을 나타낸 후, 테투리에서 부터 필요없는 정보를 삭제하는 방식을 생각테두리를 삭제하는 방식이 너무 비효율적이라고 생각하여 이동 좌표만 기록해서 이를 이용하여 맵을 그리는 방식 채택
이동에는 중복된 좌표로 이동하는 경우가 있으므로, Set 자료구조를 활용하자고 생각
- javascript의 set이 python의 set과 동일하게 동작하나? 라는 생각
- python의 경우 set에 tuple인
(1,1)
을 두번 추가하면 동일한 데이터라고 판단 - javascript의 경우 Set에 배열인
[1,1]
을 두번 추가시, 메모리 주소를 기반으로 판단 [r,c]
형태로 set에 기록할 경우 의미가 없다고 판단- row에 1000을 곱하여 나머지 연산 형태로 좌표 파악
switch를 이용하면 코드가 깔끔해질까? 라는 생각에 시도
- if 구문보다는 깔끔하지만, break를 걸어야 해서 python의 match에 비해 지저분하게 느껴짐
알고리즘을 풀다 보면 python의 음수 인덱스가 너무 편하다는 것을 깨닫게 된다.
다음번 문제는 input을 readline을 써보자.
'알고리즘 문제 풀이 > Javascript' 카테고리의 다른 글
[node.js] 백준 13023 ABCDE (0) | 2025.01.22 |
---|---|
[node.js] 백준 1309 동물원 (1) | 2025.01.17 |
[node.js] 16507 어두운 건 무서워 (0) | 2025.01.14 |
[node.js] 1331 나이트투어 with Python (0) | 2025.01.13 |
Javascript(nodejs) 백준 1756 피자 굽기 (0) | 2024.06.03 |