181210 TIL 브라우져 강의

» 1막, TIL (Today I Learned)

브라우져 렌더링 강의

image 소스

웹로딩의 최적화 방법 - DOM tree 이후에 javascript 위치하도록 해야한다.


알고리즘 by HEAD

얼마전 회식 이후에 깨달음을 얻은 헤드가 아래같은 문제를 만들었다.

헤드는 공부를 하여 하루에 1만큼의 역량을 쌓을 수 있습니다. 만약 연속적으로 공부를 하게 된다면 역량은 하루에 1씩 증가합니다 하지만 술을 마시게 된다면, 그날에 공부한 양을 잊어버리고 그 다음날에는 숙취때문에 공부를 못해 역량을 쌓을 수 없게 됩니다. 또한 그동안 증하가던 역량 증가수 또한 초기화 됩니다. 총 공부를 한 일수와 술을 마신 날이 주어질 때, 헤드의 역량이 얼마나 쌓였는지 구하시오.

예제) 만약 헤드가 10일동안 공부하는데 5일에 술을 마신다면
1일-1, 2일-2, 3일-3, 4일-4,까지 역량이 쌓여 총 10의 역량이 쌓임.
5일에 술을 마시니 역량을 쌓지 못하고, 6일에 술의 숙취때문에 역량을 쌓지못함.
그다음날 7일부터 다시
7일-1, 8일-2, 9일-3, 10일-4 까지 역량이 쌓여 10의 역량이 쌓임
결론적으로 헤드는 총 10일동안 20의 역량을 쌓음.

* 헤드는 숙취가 있는 날 또한 술을 마실 수 있습니다.
* 술을 마신 날은 총일수 내의 숫자로 주어집니다.
* 술을 마신 날을 배열의 형태로 주어집니다.

input-
solution(30, [5, 10, 15, 20]) 
output-
73

심심풀이로 풀어봐야겠다고 했는데 생각보다 오래 걸렸다. ㅋㅋㅋㅋ

function improveSkill(days, drunk){
    let skill = 0;
    let skillArr = [];
    for(let i = 0; i < days.length; i++){
        if(skillArr[i] === 0) continue;
        else if(!drunk.includes(days[i])) skillArr.push(++skill)
        else {
            skill = 0;
            skillArr[i] = 0;
            if(i < days.length) skillArr[i+1] = 0;
        }
    }
    return skillArr.reduce((a, b) => a+b);
}

improveSkill([1,2,3,4,5,6,7,8,9,10], [5])