(TIL) 2024-11-14
(TIL) 2024-11-14
알고리즘
- 시간 복잡도
- 이중 for문 : N x N의 시간이 소요
- 단일 for문 : N의 시간이 소요
공간 복잡도
- 배열
- javascript에서는 연속적인 메모리 공간으로 관리되지 않는다. (다른 정적 언어는 크기 지정)
- 링크드리스트
- 유동적으로 연결고리를 떼었다가 붙였다가 할 수 있는 자료구조
- 원소의 삽입/삭제에 강점
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class LinkedList {
constructor(value) {
this.head = new Node(value); // head 에 시작하는 Node 를 연결합니다.
}
// LinkedList 가장 끝에 있는 노드에 새로운 노드를 연결합니다.
append(value) {
let curr = this.head;
while (curr.next !== null) { // curr의 다음이 끝에 갈 때까지 이동합니다.
curr = curr.next;
}
curr.next = new Node(value);
}
getNode(index) {
let node = this.head; // 링크드리스트의 Head를 처음 노드로 지정합니다!
for (let i = 0; i < index; i++) {
node = node.next; // 원하는 위치에 당도할 때 까지 다음 노드로 이동!
}
return node;
}
addNode(index, value) {
// ["자갈"] -> ["흑연"] -> ["밀가루"] -> ["우편"]
// 이때까지는, this.head = ["자갈"]
// ["짱짱"]이라는 친구를 0번째 index로 추가
// ["짱짱"] -> ["자갈"]
// this.head = ["짱짱"]
// ["짱짱"] -> ["자갈"] -> ["흑연"] -> ["밀가루"] -> ["우편"]
const newNode = new Node(value); // 일단 새로운 값을 기준으로 새 노드를 만들어요!
if (index === 0) { // 0번째에 추가를 하고 싶다면!
newNode.next = this.head; // 원래 Head였던 노드를 새 노드의 next로 지정해요!
this.head = newNode; // 그리고, Head를 새 노드로 바꾸어줍니다!
return;
}
// [3] - [4] - [5]에서 [3] - [4] - [6] - [5]로 6을 중간에 넣는다고 할게요!
// 추가하고 싶은 index의 이전 노드 정보를 갖고옵니다! 여기선 [4] 입니다.
const node = this.getNode(index - 1);
// 1. 이전 노드([4])의 포인터([5])를 next_node로 임시 저장해요!
const nextNode = node.next;
// [4] -> [6]
// 2. 이전 노드([4])의 포인터를 [6]으로 지정합니다!
node.next = newNode;
// [6] -> [5]
// 3. 새로 삽입한 노드([6])의 포인터를 next_node인 [5]으로 지정합니다!
newNode.next = nextNode;
}
}
트러블 슈팅
- 배경
- 현재 게임에서 로그 정보를 배열로 관리하고 있다. 자꾸 늘어나면 무한으로 내려가니 일정 이상이 차면 첫번째의 로그를 삭제하고 추가하는 함수를 만들었다.
1 2 3 4 5 6
export function logsPush(logs, row) { //logs의 10개 이상일 경우 첫 로그 삭제 후 추가 const maxRow = 10; if (logs.length >= maxRow) logs.shift(); logs.push(row); }
- 그리고 아래와 같이 해당 함수를 호출하여 로그를 관리했다.
1
logsPush(logs, chalk.white(`[Wave:${stage}] 몬스터 ${spawnCnt} 마리가 등장하였습니다.`));
- 현재 게임에서 로그 정보를 배열로 관리하고 있다. 자꾸 늘어나면 무한으로 내려가니 일정 이상이 차면 첫번째의 로그를 삭제하고 추가하는 함수를 만들었다.
- 발단
- 로그를 출력하는 부분에서 maxCol사이즈에서 Length만큼 계산해서 가변적으로 출력하는 부분이 있어서 로그 텍스트의 length가 이상한 것을 확인.
1 2
console.log(logs[0].length); //37 console.log("[Wave:1] 몬스터 6 마리가 등장하였습니다."); //27
- 로그를 출력하는 부분에서 maxCol사이즈에서 Length만큼 계산해서 가변적으로 출력하는 부분이 있어서 로그 텍스트의 length가 이상한 것을 확인.
- 전개
- 그래서 확인해보기 위해서 for문으로 돌려보았다.
1 2 3 4
let b = chalk.white('[Wave:1] 몬스터 6 마리가 등장하였습니다.'); for (let i = 0; i < b.length; i++) { console.log(b[i]); }
- 그랬더니 콘솔 결과창에 아래와 같이 문자열 앞뒤로 공백이 5개씩 있는 것을 확인.
1
[Wave:1]몬스터 6 마리가 등장하였습니다.
- 그래서 확인해보기 위해서 for문으로 돌려보았다.
- 결말
- 저렇게 글자 하나하나 찍었을때 chalk.white()가 오류가 발생안되고 length에 잡힌게 신기했다.
chalk.white뿐만 아니라 red, whiteBright로 바꿔서 해보니 똑같이 앞뒤로 5개씩 공백이 찍혔다.
- 저렇게 글자 하나하나 찍었을때 chalk.white()가 오류가 발생안되고 length에 잡힌게 신기했다.
기타 작업 게시물 링크
프로젝트 관련 작업
- Display Status 영역 작업.
오늘의 주저리
- 코드카타
- 오늘 코드카타를 통해서 새로이 알게된 것은 join 함수. 배열의 각 요소를 구분자로 연결해준다. split과 반대되는 함수다.
- 프로젝트
- 어느덧 벌써 목요일. 정말 얼마 안남았다. 현재 목표 완성도는 70%정도? 인듯. 아직도 구현할게 많다…
This post is licensed under CC BY 4.0 by the author.