세상에 마상에 끔찍해라
자바스크립트에서는 큐와 스택 등 기본적인 자료구조를 내부 함수로 제공하지 않는다!!!
쓰고 싶으면 직접 구현해서 써야된다. 있는게 뭐야 자바스크립트는!
그나마 자바스크립트의 배열에서 push 와 shift 로 큐처럼 사용할 수 있지만, 배열로 문제 제출시 시간초과가 뜬다
자바스크립트 배열의 경우 shift 는 앞의 요소를 지우고 전체 배열을 하나씩 앞으로 당기는지라
너무 비효율적이고 시간복잡도가 팍팍 오른다
그래서 다음엔 자바스크립트로 직접 큐를 구현해봤는데
단일 연결 리스트로 구현했더니 연산이 꼬여서 예상치 못한 에러가 발생...
이중 연결 리스트로 구현해서 겨우 풀었다. 이중 연결 리스트로 풀면서 단일 연결리스트에서의 에러 원인도
찾게 되었다. 큐의 메소드로 front() 를 만들었는데, 큐의 속성에도 front 를 넣어 이름이 겹치므로
front 만 사용시에도 front()로 중복된 것이다... 메소드명이 속성이름과 같은지 꼭 확인하자
https://www.acmicpc.net/problem/2164
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
readline.on("line", (line) => {
input = Number(line);
readline.close();
});
readline.on("close", () => {
solution(input);
process.exit();
});
class Node {
constructor(data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
this._size = 0;
}
push(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
} else {
this.tail.next = newNode;
newNode.prev = this.tail;
}
this.tail = newNode;
this._size++;
}
front() {
return this.head.data;
}
pop() {
this.head = this.head.next;
this.head.prev = null;
this._size--;
}
size() {
return this._size;
}
}
const solution = (n) => {
const list = new LinkedList();
for (let i = 1; i <= n; i++) {
list.push(i);
}
while (list.size() !== 1) {
list.pop();
list.push(list.front());
list.pop();
}
console.log(list.front());
};
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 10828/javascript] 스택 (0) | 2022.08.15 |
---|---|
[백준 1629/javascript] 곱셈 (0) | 2022.08.14 |
[백준 1158/c++] 요세푸스 문제 (0) | 2022.08.12 |
[백준 4179/c++] 불! (0) | 2022.08.11 |
[백준 7569/c++] 토마토 (0) | 2022.08.10 |
댓글