말랑한 하루
[Programmers] 표 편집 (Lv 3, JavaScript) 본문
반응형
[ 학습 내용 ]
1. 노드를 생성하는법
2. 노드연결리스트를 생성하는 법
3. 노드를 삭제하는 법
4. 노드를 되돌리는 법
[ 소스 코드 ]
function solution(n, k, cmd) {
// Link Node 생성, 생성시 화살표함수 표기법 불가능
const Node = function (index, prev) {
this.index = index;
this.prev = prev;
this.next = null;
}
let prevNode = new Node(0);
let select;
// LinkedList 생성
for(let i=1; i<n; i++) {
const tempNode = new Node(i, prevNode);
// 이전노드의 꼬리를 현재노드와 연결
prevNode.next = tempNode;
// 연결이 완료된 후 이전노드 갱신
prevNode = tempNode;
// 처음 선택될 노드 저장
if (i === k) select = tempNode;
}
// 노드 삭제 대기 공간
let deleteBin = [];
// 명령어 U, D
const selectNode = (cnt, dir) => {
for(let i=0; i<cnt; i++) {
// LinkedList의 처음이거나 끝인경우
if (!select[dir]) break;
select = select[dir];
}
}
const deleteNode = () => {
const prev = select.prev;
const next = select.next;
deleteBin.push(select);
// 삭제 후 아래행 선택, 마지막 행인 경우 윗행 선택
select = next ? next : prev;
// 삭제 후 이전노드 갱신
if (prev) prev.next = next;
// 삭제 후 이후노드 갱신
if (next) next.prev = prev;
}
const restoreNode = () => {
const storeNode = deleteBin.pop();
const prev = storeNode.prev;
const next = storeNode.next;
if (prev) prev.next = storeNode;
if (next) next.prev = storeNode;
}
cmd.forEach((cm) => {
const [type, option] = cm.split(" ");
switch(type) {
case "U":
selectNode(option, "prev");
break;
case "D":
selectNode(option, "next");
break;
case "C":
deleteNode();
break;
case "Z":
restoreNode();
break;
}
})
let answer = new Array(n).fill("O");
deleteBin.forEach((node) => answer[node.index] = "X");
return answer.join("");
}
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 순위 (Lv 3, JavaScript) (0) | 2022.12.19 |
---|---|
[Programmers] 가장 먼 노드 (Lv 3, JavaScript) (0) | 2022.12.17 |
[Programmers] 여행경로 (Lv 3, JavaScript) (0) | 2022.12.16 |
[Programmers] 섬 연결하기 (Lv 3, JavaScript) (0) | 2022.12.14 |
[Programmers] 단속카메라 (Lv 3, JavaScript) (0) | 2022.12.10 |
Comments