23.09.25
📚 오늘 공부한 것
자바스크립트로 큐 구현하기
class Queue {
constructor(){
this.queue = []
this.front = 0
this.rear =0
}
enqueue(v) {
this.queue[this.rear++] = v;
}
dequeue() {
const value = this.queue[this.front]
delete this.queue[this.front]
this.front +=1
return value
}
peek() {
return this.queue[this.front]
}
size() {
return this.rear - this.front
}
}
파이썬처럼 queue 모듈이 있는 것이 아니라 매번 직접 구현하는게 시간도 오래걸리고 오류를 만들 가능성이 크다.. 파이선 .pop[0]처럼 배열 맨 앞을 삭제하고 반환받는 shift()라는 함수가 있지만! 강의에서도 사용을 권하지 않았고 시간 또한 오래걸린다(파이썬pop[0] 사용 지양과 마찬가지 인듯)
강사님도 shift를 사용하지 말라고 하셨고 O(n)이라는 시간때문에 안쓰는게 맞지만, 다른 사람들의 문제 풀이를 봤을 때 빈번하게 사용이되어서 조금 의문이 들었다.
속도 비교 블로그글을 보고 상당히 큰 차이를 느끼고 큐를 쓰기로 다짐다짐 ㅎㅎ..
function solution(genres, plays) { var answer = []; const genreMap = new Map(); genres .map((genre, idx) => [genre, plays[idx]]) .forEach(([genre, play], idx) =>{ const data = genreMap.get(genre) || {total : 0, songs :[]}; genreMap.set(genre, { total : data.total + play, songs: [...data.songs, {play, idx}].sort((a,b) => b.play - a.play).slice(0,2) }) }) return [...genreMap.entries()] .sort((a,b) => b[1].total - a[1].total) .flatMap(item => item[1].songs) .map(song => song.idx) }
큐 사용시 파이썬에선 추가 구현없이 모듈을 불러와 사용했는데, 자바스크립트에선 클래스로 구현해야하는 점이 번거롭게 느껴졌다.
JS에서 사용하는 고차함수들 사용법에 미숙했다.
라이브코딩 생각보다 흥미진진하고 좋았다! 일단 풀어낸다는 목표하에 더럽게(?)푼 것 같아서 이후에 로직과 코드를 수정해낸 것에 뿌듯하다
실습문제 풀 때 구상->파이썬 구현 ->JS 구현을 하다보니 시간이 많이 들었다. 그리고 JS 함수들 숙련도면에서 많이 부족함을 느꼈다.
자스 강의듣는 단위기간 통해서 자스로 PS하는 단련을 조금씩 하려고 한다.