Skip to content

Commit 8de99d9

Browse files
committed
💡 프로그래머스 81303 - 표 편집
1 parent 273074b commit 8de99d9

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Programmers/Level3/81303_표_편집.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,66 @@
1111
* - 이중 연결 리스트로 구현해서 해결 완료
1212
*/
1313

14+
// ANCHOR - 2025.12.03 풀이
15+
16+
function solution3(n, k, cmd) {
17+
const row = Array.from({ length: n }, (_, idx) => ({
18+
prev: idx === 0 ? null : idx - 1,
19+
isDeleted: false,
20+
next: idx === n - 1 ? null : idx + 1,
21+
}));
22+
23+
const deleted = [];
24+
let cur = k;
25+
for (let idx = 0; idx < cmd.length; idx++) {
26+
const [op, argstr] = cmd[idx].split(" ");
27+
const arg = Number(argstr);
28+
switch (op) {
29+
case "U":
30+
for (let cnt = 0; cnt < arg; cnt++) {
31+
cur = row[cur].prev;
32+
}
33+
break;
34+
case "D":
35+
for (let cnt = 0; cnt < arg; cnt++) {
36+
cur = row[cur].next;
37+
}
38+
break;
39+
case "C":
40+
// 현재 선택된 행을 삭제
41+
row[cur].isDeleted = true;
42+
deleted.push(cur);
43+
// 현재 선택된 행이 가장 마지막 행인 경우 현재 행을 그 위 행으로
44+
if (row[cur].next === null) {
45+
cur = row[cur].prev;
46+
if (cur) row[cur].next = null;
47+
} else {
48+
// 그 외에는 아래 행 선택
49+
if (row[cur].prev !== null) row[row[cur].prev].next = row[cur].next;
50+
row[row[cur].next].prev = row[cur].prev;
51+
cur = row[cur].next;
52+
}
53+
break;
54+
case "Z":
55+
// 최근에 삭제된 것 복구
56+
const deletedIdx = deleted.pop();
57+
if (deletedIdx === undefined) break;
58+
if (row[deletedIdx].prev !== null)
59+
row[row[deletedIdx].prev].next = deletedIdx;
60+
if (row[deletedIdx].next !== null)
61+
row[row[deletedIdx].next].prev = deletedIdx;
62+
row[deletedIdx].isDeleted = false;
63+
break;
64+
}
65+
}
66+
67+
const answer = row.reduce(
68+
(acc, { isDeleted }) => (acc += isDeleted ? "X" : "O"),
69+
""
70+
);
71+
return answer;
72+
}
73+
1474
// ANCHOR - 2025.10.04 풀이 - 이중 연결 리스트
1575
function solution2(n, k, cmd) {
1676
// 각 노드가 가리키는 prev와 next를 저장하는 배열 (이중 연결 리스트)

0 commit comments

Comments
 (0)