큐는 2가지방식으로 구현할수있다.
1. 배열로 구현가능하지만 배열이 고정자료형인 c나 자바같은 경우 배열을 넓히는과정이 필요
js의 경우 배열이 무한정 길어질수있음.
2. 링크드리스트로 구현
환형큐를 연결리스트로 구현 하면 이점이 없다.
해시테이블
js에서는 map set으로 써먹을수있다.
일급함수
기존에는 for문에서 인덱스로 순회하면서 리스트 순회했는데
es6부터 이터러블이 나오게 되었다.
이터러블 순회는 배열에서 인덱스 순회와 다르게
리스트를 순회한다.
symbol.iterator 이것은 객체의 키로 사용될수있다.
강사님이 알고리즘 문제를 해결하는것을 보니.
자연어로 되어있는 문제를 보고 어떻게 풀건지 대강 주석으로 짜고
어떤게 문제의 키워드 인지 알고
그후 해당 논리를 전산화를 하는것 같다.
그냥 뇌피셜로 푸는걸 그만하고 하나씩
논리화와 그후 전산화를 할수있는 능력을 키워야겠다.
프린터문제
문제 https://programmers.co.kr/learn/courses/30/lessons/42587
//프린터 목록 생성
//해당 프린터랑 우선순위를 연관배열로 생각
//각 프린터당 우선순위가 높은지 계산
function solution(priorities, location) {
let front=0
let end=priorities.length;
let printer=[];
let max=[...priorities].sort((a,b)=>b-a)
priorities.map((a,i)=>{
printer.push(String.fromCharCode(65+i))
})
var answer = 0;
let range=end-front;
let de=printer[location]
let mi=0
while(range>0){
if(priorities[front]>=max[mi]){
if(printer[front]===de) return mi+1
delete priorities[front]
delete max[mi]
delete printer[front]
front+=1
mi+=1
}else{
priorities.push(priorities[front])
printer.push(printer[front])
delete printer[front]
delete priorities[front]
front+=1
end+=1
}
range=end-front
}
return answer;
}
베스트엘범
출처 https://programmers.co.kr/learn/courses/30/lessons/42579
function solution(genres, plays) {
var answer = [];
let total= new Map();
let songs=new Map();
genres.map((g,i)=>{
let song=songs.get(g) || new Map()
song.set(i,plays[i])
songs.set(g,song)
sum=(total.get(g) || 0) +plays[i];
total.set(g,sum)
})
let result=[]
let tmp=[...total.entries()].sort((a,b)=>b[1]-a[1])
for(let g of tmp){
let t=[...songs.get(g[0]).entries()].sort((a,b)=>b[1]-a[1])
result.push(t[0][0])
t[1] ? result.push(t[1][0]) : null
}
return result;
}
함수형 처럼 풀어보고 싶었지만.. 그냥 매서드만 함수형이다 흑