매일 알고리즘 문제 풀던 알고리즘 코드 카타가 수준반 분별 수업으로 바뀌었다. 때문에 실시간 수업이 하나 더 늘어서, 월요일에는 실시간 수업만 2개라 뭔가 더 바빠진 느낌이다.
※ Array 내부 동작 구현(자료구조)
심화반에서는 자료구조 위주로 실시간 수업을 진행하는데 첫 번째 과제로 클래스 문법으로 배열의 내부 동작을 구현하는 걸 내주셨다.
class FixedArray {
#arrayLength;
#array;
// 필요한 변수 추가 가능
#arrayIndex;
// #arrayLength와 #array를 알맞게 초기화
// 생성자 파라미터에는 FixedArray의 고정된 길이를 받아야됨.
// #array초기화 시 각요소의 값은 undefined
// 배열 생성시 올바른 0이상의 숫자 타입의 값만 들어온다는 것을 가정하였음
constructor(length) {
this.#arrayLength = length;
this.#array = [];
this.#arrayIndex = 0;
}
//////////////////////////////
////// LEVEL 1 /////
//////////////////////////////
// 배열 맨 뒤에 요소 추가
// 배열의 길이가 #arrayLength를 초과할 경우 요소를 추가되면 안됨.
push(element) {
if (this.#arrayIndex === this.#arrayLength)
throw new Error("배열의 길이 초과");
this.#array[this.#arrayIndex++] = element;
}
// 배열의 맨 마지막 요소를 제거하고 그 요소를 반환
pop() {
if (this.#arrayIndex === 0)
return new Error("빈 배열임으로 pop()을 실행할 수 없음");
return this.#array[--this.#arrayIndex];
}
// 현재 배열의 사용되고 있는 크기를 반환
getLength() {
return this.#arrayIndex;
}
// 현재 배열의 상태를 string으로 반환
stringify() {
if (this.#arrayIndex === 0)
return new Error("빈 배열임으로 stringify()를 실행할 수 없음");
let strArray = "[";
for (let i = 0; i < this.#arrayIndex; i++) {
strArray += i === 0 ? `${this.#array[i]}` : `, ${this.#array[i]}`;
}
return strArray + "]";
}
}
// SUCCESS 테스트 케이스, 주석처리 된 부분은 해당 위치에서 ERROR CASE
// Error에 대해선 모두 예외 처리하여 오류 발생
const array = new FixedArray(3);
array.push(1);
array.push(2);
array.push(3);
// array.push(4);
console.log(`배열의 길이: ${array.getLength()}`);
console.log(`stringify() 실행 결과: ${array.stringify()}`);
console.log(`pop()으로 반환된 값: ${array.pop()}`);
console.log(`pop()으로 반환된 값: ${array.pop()}`);
console.log(`pop()으로 반환된 값: ${array.pop()}`);
// console.log(array.pop());
// console.log(array.stringify());
지금에 와서 완성된 코드를 보면 '당연히 써져있는 코드대로 작동하면 이렇게 되겠구나'라는 생각이 들지만, 막상 처음 구현할 때는 '배열이 어떻게 생성되지?', 'pop()을 하면 어떤 동작을 넣어야 할까?'와 같이 동작 원리를 한 번 더 고민해 볼 수 있었던 시간이었다.
'TIL' 카테고리의 다른 글
[2024.05.24] JS_영역 초과한 텍스트를 생략 부호로 (...) 처리 (0) | 2024.05.24 |
---|---|
[2024.05.23] styled-components unkowns prop "background" 오류 해결(Transient Props) (0) | 2024.05.23 |
[2024.05.21] 챌린지반 복습_React-Router loader (0) | 2024.05.21 |
[2024.05.20] (NHN은 이렇게 한다!) 자바스크립트 성능 이야기 책 (0) | 2024.05.20 |
[2024.05.19] 챌린지반 과제 완성_피카츄의 놀이터 (0) | 2024.05.20 |