🚀 들어가며 프론트엔드 데브코스 강의를 듣는데 history API 파트가 나왔다. 마음이 너무 급했던 탓일까, 빠르게 이해하려고 보니 이해가 되지 않았다. 나에게 SPA는 생소한 개념이었고, SPA를 모르다보니 SPA를 위한 history API도 이해하기 쉽지 않았다. 잠시 급한 마음을 다스리고, SPA부터 차근차근 공부하기 시작했다. ✅ SPA(Single Page Application) 과거에는 웹 페이지를 렌더링할 때 서버에 렌더링에 필요한 리소스를 요청하고, 받아온 리소스를 클라이언트에서 렌더링했다. 즉, 렌더링이 필요한 특정 부분 이외의 불필요한 부분까지 같이 렌더링해야만 했다. 하지만 SPA가 등장하고 나서부터는 특정 부분의 렌더링을 위해 서버에서 필요한 데이터만 전달받고 렌더링할 수 있게..
문제요약 나의 코드 및 설명 레버가 있는 칸까지 탐색한 후, 도착 지점까지 있는 칸까지 탐색한다. var dx = [0,1,0,-1]; var dy = [-1,0,1,0]; function goLever(sx,sy,lx,ly,n,m,maps,visited){ var queue = []; queue.push([sx,sy]); visited[sy][sx] = 1; while (queue.length){ var [x,y] = queue.shift(); if (x == lx && y == ly) break; for (let i = 0; i = m || ny >= n){ conti..
문제요약 나의 코드 및 설명 (시간초과) function fibo (n) { if (n == 0){ return 0; } if (n == 1){ return 1; } return fibo(n-1) + fibo(n-2); } function solution(n) { var answer = 0; answer = fibo(n) % 1234567; return answer; } 다른 코드 및 설명 DP를 활용하여 문제를 해결하였다. function solution(n) { var answer = 0; var arr = Array(n+1).fill(0); arr[0] = 0; arr[1] = 1; for (var i = 2; i < n+1; i++){ arr[i] = (arr[i-2] + arr[i-1]) % 1..
문제요약 나의 코드 및 설명 01 (시간초과) n부터 1씩 숫자를 증가시키며, 10진수를 2진수로 변환하고, 1의 개수를 카운트한 후 1의 개수가 같은 수를 찾는다. function solution(n) { var answer = 0; var bin = []; var originCnt = 0; var originNum = n; while (true){ if (n == 0 || n == 1){ bin.push(n); break; } bin.push(n % 2); n = parseInt(n / 2); } bin.map(element => { if (element == 1){ originCnt += 1; } }); console.log(originCnt); var i = 1; var newCnt = 0; va..
문제요약 나의 코드 및 설명 주어진 배열에서 요소의 개수가 적은 순으로 오름차순 정렬하고, 배열의 첫 번째 인덱스부터 shift()한 후, 세트 자료구조로 변환하여 개수를 세주었지만, 시간초과가 발생했다. function count(array, find){ var cnt = 0; for (var i = 0; i (a-b)); tangerine.sort((a,b)..
문제요약 나의 코드 및 설명 두 수의 최소공배수는 [두 수의 곱 / 최대공약수] 이다. 따라서 최대공약수를 먼저 구하면 되는데 유클리드 호제법을 활용해서 구현하면 된다. // cf) 최대공약수를 구하는 코드 function getGcd(a, b) { if (b == 0) return a; return getGcd(b, a%b); } function solution(arr) { var answer = 0; var gcd = arr.reduce((a,b) => getGcd(a,b)); console.log(gcd); // 최대공약수가 출력됨 answer = arr.redce((a,b) => (a*b) / getGcd(a,b)); console.log(answer); // 최소공배수가 출력됨 return an..
문제요약 나의 코드 및 설명 백트래킹으로 문제를 해결하려고 했는데 시간초과로 인해 실패했다. var jump = [1,2]; var cnt = 0; function dfs(depth, temp, n){ if (temp >= n) { if (temp == n){ cnt += 1; } return } for (var j of jump){ dfs(depth+1, temp+j, n); } } function solution(n) { var answer = 0; dfs(0, 0, n); answer = cnt % 1234567 return answer; } 다른 코드 및 설명 DP를 활용하여 문제를 해결할 수 있다. 1칸을 뛰어야 할 때 : 1가지 2칸을 뛰어야 할 때 : 2가지 DP[3] = DP[1] + DP..
문제요약 나의 코드 및 설명 function solution(s) { var answer = ''; var array = s.split(" "); array = array.map((word) => { var first = word[0]; var remain = word.slice(1,word.length); if (word == ""){ // 공백이 연속으로 두개 있을 경우 ""가 배열에 들어갈 수 있으므로 return "" } else { if (97