![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/z9C9L/btranysV9Xj/zO463rTzvAxzKc7e7EaTy1/img.jpg)
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์๋ค์ ํตํด ์คํฌ๋กค ์์น์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ Header ๋์์ธ์ด ๋๋๋ง๋๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ์๋ค. scrollTop window.addEventListener('scroll', (event) => { let {scrollTop} = event.target.scrollingElement; //document.documentElement.scrollTop || document.body.scrollTop nav.classList.add('active'); //active ํด๋์ค ์ฌ๋ถ์ ๋ฐ๋ผ ํค๋ ๋์์ธ์ด ์์ดํ๊ฒ ์๋ if(scrollTop = 50 ) ? nav.classList.add('active') : nav.classList.remove('active'); }) Window ์ธํฐํ์ด์ค์ ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cCfn3u/btrafLtBYj6/exBxKlpmCnKxYqOtgfHox0/img.png)
๋ฌธ์ ํ ๊ฐ์ ํ์์ค์ด ์๋๋ฐ ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ n๊ฐ์ ํ์๋ค์ ๋ํ์ฌ ํ์์ค ์ฌ์ฉํ๋ฅผ ๋ง๋ค ๋ ค๊ณ ํ๋ค. ๊ฐ ํ์์ ๋ํด ์์์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ์ฃผ์ด์ ธ ์๊ณ , ๊ฐ ํ์๊ฐ ๊ฒน์น์ง ์๊ฒ ํ ๋ฉด์ ํ์์ค์ ์ฌ์ฉํ ์ ์๋ ์ต๋์์ ํ์๋ฅผ ์ฐพ์๋ผ. ๋จ, ํ์๋ ํ๋ฒ ์์ํ๋ฉด ์ค๊ฐ์ ์ค ๋จ๋ ์ ์์ผ๋ฉฐ ํ ํ์๊ฐ ๋๋๋ ๊ฒ๊ณผ ๋์์ ๋ค์ ํ์๊ฐ ์์๋ ์ ์๋ค. ๋ฌธ์ ํ์ด ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์ฐจ ํ์์ ๋์์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๋ ฌ_ ์์์๊ฐ๊ณผ ์ข ๋ฃ์๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ ํ์ฌ ์ฐธ์กฐํ๊ณ ์๋ ํ์ ์ข ๋ฃ์๊ฐ๋ณด๋ค ํ์ ์์์๊ฐ์ด ๊ฐ๊ฑฐ๋ ํด ๊ฒฝ์ฐ ํ์ ๊ฐ๋ฅ ํ์๊ฐ ๊ฐ๋ฅํ ํ์ ์์์๊ฐ์ ๊ทธ ๋ค์ ์ข ๋ฃ์๊ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฝ๋ function solution(...arr) { let answer =..
document.addEventListener('click', function (event) { if(event.target === document.querySelector('button')) return; (...) }, false); ๋ค์๊ณผ ๊ฐ์ด ํด๋์ค๋ ์์ด๋๋ช ์ด ์ง์ ๋์ด ์์ง ์์ ๋ฒํผ ์์๋ฅผ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ด์์ ์๋ณํ๊ธฐ ์ํด์ ์กฐ๊ฑด๋ฌธ์ ์์ฑํ์๋ค. ํ์ง๋ง ์ฌ๋ฌ ๋ฒํผ ์ค ๊ฐ์ฅ ์ฒ์์ ์๋ ๋ฒํผ ์์๋ง ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๋ฌธ์ ํด๊ฒฐ Document.querySelector()๋ ์ ๊ณตํ ์ ํ์ ๋๋ ์ ํ์ ๋ญ์น์ ์ผ์นํ๋ ๋ฌธ์ ๋ด ์ฒซ ๋ฒ์งธ Element๋ฅผ ๋ฐํํฉ๋๋ค. ์ผ์นํ๋ ์์๊ฐ ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค. querySelector๋ก ์ฐธ์กฐํ ๋ ธ๋ ๊ฐ์ฒด๋ ๋ฌธ์ ๋ด ์ฒซ ๋ฒ์งธ Elem..
๋ฌธ์ N๊ฐ์ ํ๋ฉด์์ ์ขํ(X, Y)๊ฐ ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์ขํ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.์ ๋ ฌ๊ธฐ์ค์ ๋จผ์ X๊ฐ์ ์ํด์ ์ ๋ ฌํ๊ณ , X๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ Y๊ฐ์ ์ํด ์ ๋ ฌํฉ๋๋ค. ๋ฌธ์ ํ์ด ํ ์์ ์ขํ๋ฅผ ์์๋๋ก ๋์ดํ๊ธฐ ์ํด 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ ํด๋น ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์ ํ ์ ๋ ฌ ์ํ X๊ฐ์ ๋น๊ตํ ๊ฒฝ์ฐ์๋ 1์ฐจ์ ๋ฐฐ์ด ๋ด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋น๊ต Y๊ฐ์ ๋น๊ตํ ๊ฒฝ์ฐ์๋ 1์ฐจ์ ๋ฐฐ์ด ๋ด ๋ ๋ฒ์งธ ์์๋ฅผ ๋น๊ต ์ฝ๋ function solution(arr) { let answer = arr; for(let i = 0; i arr[j][0]) { [arr[i], ar..
๋ฌธ์ ์ ํ๊ธฐ๊ฐ ์์๋์์ต๋๋ค. ํ์๋ ์ ์ง๊ฟ์ ๋ง๋ ๋๋ฌด ์ ์ด ๋ฌ์ต๋๋ค. ํ์๋ค ๋ฐ์๋ N๋ช ์ ํ์๋ค์ด ์์ต๋๋ค. ์ ์๋์ ๋ฐ ํ์๋ค์๊ฒ ๋ฐ ๋ฒํธ๋ฅผ ์ ํด ์ฃผ๊ธฐ ์ํด ์ด๋์ฅ์ ๋ฐ ํ์๋ค์ ํค๊ฐ ๊ฐ์ฅ ์์ ํ ์๋ถํฐ ์ผ๋ ฌ๋ก ํค์์ผ๋ก ์ธ์ ์ต๋๋ค. ์ ์ผ ์์ ๊ฐ์ฅ ์์ ํ์๋ถํฐ ๋ฐ ๋ฒํธ๋ฅผ 1๋ฒ๋ถํฐ N๋ฒ๊น ์ง ๋ถ์ฌํฉ๋๋ค. ํ์๋ ์ง๊ฟ๋ณด๋ค ํค๊ฐ ํฝ๋๋ค. ๊ทธ๋ฐ๋ฐ ํ์๊ฐ ์ ๋ฒํธ๋ฅผ ๋ฐ๊ณ ์ถ์ด ์ง๊ฟ๊ณผ ์ ๋ฆฌ๋ฅผ ๋ฐ๊ฟจ์ต๋๋ค. ์ ์๋์ ์ด ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ํ์๋ค์๊ฒ ์์๋ ์์๋๋ก ๋ฒํธ๋ฅผ ๋ถ์ฌํ์ต๋ ๋ค. ํ์์ ์ง๊ฟ์ด ์๋ฆฌ๋ฅผ ๋ฐ๊พผ ๋ฐ ํ์๋ค์ ์ผ๋ ฌ๋ก ์์๋ ํค ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋ ํ์๊ฐ ๋ฐ์ ๋ฒ ํธ์ ํ์ ์ง๊ฟ์ด ๋ฐ์ ๋ฒํธ๋ฅผ ์ฐจ๋ก๋ก ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์. ๋ฌธ์ ํ์ด ๋ณธ๋ ์ ์๋์ด ์ ํด์ค ๋ฒํธ ์์๋ฅผ ๊ตฌํ๋ค. ์์ ๊ตฌํ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/sFr6Q/btq92xgTuAh/dubfJ28Bju5u5igwrsrkTK/img.gif)
๋ค์๊ณผ ๊ฐ์ด Progress-Bar๋ฅผ ๊ตฌํํ ๋, ๋ฒํผ์ ํด๋ฆญํ ๋ค์ ์งํ ๋ฐ ์์์ width ๊ฐ์ด 25%๊ฐ ๋์์ ๊ฒฝ์ฐ ํด๋น ์ ๋๋ฉ์ด์ ์ ์ข ๋ฃ์ํค๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋ค. if(elem.style.getPropertyValue('width') === range * current) { //ํ์ฌ ์งํ ๋ฐ ๊ฐ๋ก ๋๋น๊ฐ ์ง์ 25%์ ๋๋ฌํ์ ๊ฒฝ์ฐ clearInterval(intervalId); //์ ๋๋ฉ์ด์ ์ข ๋ฃ current++; } ํ์ง๋ง ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ๊ณ ์งํ ๋ฐ๋ ๋์์ด ์ข ๋ฃ๋์ง ์์ ์ฑ ๋ฌดํ ๋ฃจํ๋ก ๋น ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. getPropertyValue์ ๋ฐํ๊ฐ ๋ฌธ์ getPropertyValue๊ฐ ๋ฐํํ๋ ๋ฐ์ดํฐ ํ์ ์ ๋ฌธ์ ๊ฐ ์์๋ค. The CSSStyleDeclar..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cgGWi3/btq90lnJ6Qh/DC0B6jbhpnhd7zKo92pDd1/img.png)
๋ฌธ์ ๋ฌธ์ ํ์ด LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ ์บ์(Cache)์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ ์บ์๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ํฌ๊ธฐ๋ ์ ํ๋์ด ์์ ์บ์๋ ์ ํ๋ ๋ฆฌ์์ค ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅ ๋ฐ ์ฐธ์กฐํ ์ ์์ด์ผ ํจ ๋ฉ๋ชจ๋ฆฌ ์์์ ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋ ์ ์ด ์๋ ์บ์์ ๋ฉ๋ชจ๋ฆฌ๋ถํฐ ๋์ฒดํ๋ฉฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ์ฝ๋ function solution(s, w) { let answer = Array.from({length: s}); for(let i = 0; i < w.length; i++) { if(!answer.includes(w[i])) { //Cache Miss์ผ ๊ฒฝ์ฐ if(answer.length === s) { //๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฆ๊ฐ ๋ชจ๋ ์ฐผ์ ๊ฒฝ์ฐ answer.pop(..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bvg5Ju/btq9Y6jh2EF/EKnMexYBo8sl3eD1n1oJak/img.gif)
๋ค์๊ณผ ๊ฐ์ด ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์ ์ฐฝ์ด ์๋ก ๋จ๋๋ก ๊ตฌํํ์๋ค. ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ํ์ ์ฐฝ ์ปจํ ์ด๋์ ๊ฐ์์ฑ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ๊ฒ์ CSS ์์ Opacity๋ฅผ ์ด์ฉํ๋ค๋ฉด, .popup-modal.is--visible { //ํด๋น ํด๋์ค๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ Opacity ๊ฐ์ ๋ณํ๋ก ๋ณด์ด๊ฒ ํจ opacity: 1; } ํ์ฌ ๋ทฐ ์์์ ์์๊ฐ ์ฌ๋ผ์ ธ ๋ณด์ด์ง๋ ์๊ฒ ๋์ง๋ง ํด๋น ์์ญ์ ์ด๋ฒคํธ๋ ์๋ต์ ํ๊ฒ ๋๊ณ ์๋ํ๋ค. ์ด๋ฅผ ๊ฐ์ ๋ก ์ ์ดํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด pointer-events ์์ฑ์ ํ์ฉํ์๋ค. .popup-modal { (...) opacity: 0; pointer-events: none; //์์๊ฐ ๋ณด์ด์ง ์์ ๊ฒฝ์ฐ์๋ ์ด๋ฒคํธ ๋ํ ๋ฐ์ํ์ง ์๋๋ก ์ ์ด } .popup-modal.is--visibl..