문제요약 나의 코드 및 설명 레버가 있는 칸까지 탐색한 후, 도착 지점까지 있는 칸까지 탐색한다. 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
문제요약 나의 코드 및 설명 (효율성 TC2 시간초과) function solution(s){ var answer = true; var stack = []; for (var i = 0; i < s.length; i++){ if (s[i] == "(") { stack.push("("); } else { if (stack[stack.length - 1] == "(") { stack.pop(); } else { stack.push(")"); } } } if (stack.length == 0){ answer = true; } else { answer = false; } return answer; } 다른 코드 및 설명 function solution(s){ var answer = true; var stack =..