TIL-220324

·2022년 3월 24일
0

데브코스-TIL

목록 보기
1/8

😊오늘의 공부

큐는 2가지방식으로 구현할수있다.
1. 배열로 구현가능하지만 배열이 고정자료형인 c나 자바같은 경우 배열을 넓히는과정이 필요
js의 경우 배열이 무한정 길어질수있음.
2. 링크드리스트로 구현

환형큐를 연결리스트로 구현 하면 이점이 없다.

해시테이블
js에서는 map set으로 써먹을수있다.

함수형

일급함수

  • 함수가 값?!
    고차 함수를
  • 함수를 값을 다뤄?!

이터러블에 대하여

기존에는 for문에서 인덱스로 순회하면서 리스트 순회했는데
es6부터 이터러블이 나오게 되었다.

이터러블 순회는 배열에서 인덱스 순회와 다르게
리스트를 순회한다.

  • 이터러블: 이터레이터를 리턴하는 [symbol.iterator()]를 가진값
  • 이터레이터: {value, done } 객체를 리턴하는 next()를 가진값
  • 이터러블/이터레이터 프로토콜: 이터러블을 for...of, 전개 연산자 등과 동작하로도 한 규약 즉 프로토콜

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;
}

함수형 처럼 풀어보고 싶었지만.. 그냥 매서드만 함수형이다 흑

0개의 댓글