728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/81303#
풀이
이 문제.... 쉽지 않았다...
처음에는 Map 객체를 이용해 구현했는데, 테스트 케이스는 통과하지만 정답은 아니였다.
function solution(n, k, cmd) {
const map = new Map();
const del = [];
for (let i = 0; i < n; i++) {
map.set(i, "O");
}
for (let i = 0; i < cmd.length; i++) {
if (cmd[i] === "C") {
map.set(k, "X");
del.push(k);
if (map.size > k + 1) {
if (map.get(k + 1) !== 'X') {
while (map.get(k + 1) !== 'O') {
k++;
}
}
else {
while (map.get(k - 1) !== 'O') {
k--;
}
}
}
}
else if (cmd[i] === "Z") {
const last = del.pop();
map.set(last, 'O');
}
else {
let [c, d] = cmd[i].split(' ');
for (let j = 1; j <= d; j++) {
if (map.get(k + i) === 'X') d++;
}
c === "D" ? k += +d : k -= +d;
}
}
return [...map].reduce((acc, cur) => acc + cur[1], '');
}
그렇다면 이렇게 하나가 빈 빵꾸? 가 나면 다른 연결된 곳으로 이동하는 자료구조.... 그것은 링크드리스트......
객체로 링크드 리스트를 구현하고 이를 이용해 각 표들의 연결을 구성해야한다.
코드
function solution(n, k, cmd) {
const linked = {
0: [undefined, 1]
};
const state = Array.from({ length: n }, () => true)
const del = [];
for (let i = 1; i < n; i++) {
if (i === n - 1) linked[i] = [i - 1, undefined];
else linked[i] = [i - 1, i + 1];
}
for (let i = 0; i < cmd.length; i++) {
if (cmd[i] === "C") {
const [prev, next] = linked[k];
if (prev === undefined) {
linked[next][0] = undefined;
}
else if (next === undefined) {
linked[prev][1] = undefined;
}
else {
linked[prev][1] = next;
linked[next][0] = prev;
}
del.push(k);
state[k] = false;
k = linked[k][1] ? linked[k][1] : linked[k][0]
}
else if (cmd[i] === "Z") {
const re = del.pop();
const [prev, next] = linked[re];
if (prev === undefined) {
linked[next][0] = re;
}
else if (next === undefined) {
linked[prev][1] = re;
}
else {
linked[prev][1] = re;
linked[next][0] = re;
}
state[re] = true;
}
else {
let [c, d] = cmd[i].split(' ');
if (c === 'D') {
for (let j = 0; j < +d; j++) {
k = linked[k][1];
}
}
else {
for (let j = 0; j < +d; j++) {
k = linked[k][0];
}
}
}
}
return Array.from({ length: n }, (_, i) => state[i] ? 'O' : 'X').join('');
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 자물쇠와 열쇠 (0) | 2024.10.03 |
---|---|
[JS] 양과 늑대 (0) | 2024.10.01 |
[JS] 파괴되지 않은 건물 (0) | 2024.09.29 |
[JS] 셔틀버스 (0) | 2024.09.28 |
[JS] 비밀지도 (0) | 2024.09.27 |