지난주와 지지난주 자료 구조 공부를 했었고 복습겸 정리해보려 한다.사실 할게 많아 계속 미뤘는데 이런 상태가 계속 반복되고 있어 드디어 정리 해보려 글을 쓴다.굉장히 긴 글이 될것 같은데 함께 힘내보도록하자.그래서 먼저 자료구조는 왜 공부해야하는지 알고 시작을 해야하는데..사실 처음에 배웠을 때 알았는데 지금은 까먹었기 때문에 다시 알아봤다.💡 메모리를 효율적으로 사용해 데이터를 빠르고 안전하게 처리하자!이게 자료구조의 궁극적인 목표다.즉, 우리는 특정 상황(문제)에서 가장 짧은 시간에 효율적인 메모리 사용을 할 수 있는 자료구조를 잘 선택할 수 있도록 잘 배워놔야한다.그러려면 우리는 가장 먼저 시간복잡도를 알아야한다.시간복잡도란 무엇이고 왜 알아야할까?시간 복잡도는 우리가 위에서 말한 짧은 시간을 판..
이 문제는 두가지 방법으로 풀 수 있습니다.첫 번째는 만들 수 있는 가장 큰 수를 찾아 그 수 이하의 모든 소수를 구해 numbers의 숫자가 포함되어 있는지 확인하는 방법.두 번째는 만들 수 있는 모든 수를 구해(DFS) 소수인지 아닌지 판별하는 방법.첫 번째 방법은function solution(numbers) { let answer = 0; let arr = []; numbers = numbers.split("").sort((a,b)=> b-a).join(""); for(let i = 0; i x).map(x =>{ let mini_numbers = numbers.toString().split(""); let mini_x = x.toString().sp..
제가 문제를 풀다가 난관에 봉착했었습니다.//1번function solution(numbers) { var answer = ''; let arr = []; for(let i = 0; i b[1].substr(0,4)-a[1].substr(0,4)) arr.map(x => answer+=x[0]) return answer[0] === "0"?"0":answer;}//2번function solution(numbers) { var answer = ''; let arr = []; for(let i = 0; i b[1].substr(0,4)-a[1].substr(0,4)) arr.map(x => answer+=x[0]) return answer[0] ..
던전 array 순서대로 처음부터 탐색 -> 점점 깊게 들어가는 방식function solution(k, dungeons) { let max = 0; let visit = new Array(dungeons.length).fill(false); function dfs(cur,tired,depth){ visit[cur] = true; tired-=dungeons[cur][1]; for(let i = 0; i =dungeons[i][0])dfs(i,tired,depth+1); } max = Math.max(max,depth); visit[cur] = false; } for(let i = 0 ; i
재귀함수를 이용해 깊이 전부 탐색function solution(numbers, target) { var answer = 0; function dfs(n,sum){ if(n === numbers.length){ if(sum === target) answer++; }else{ dfs(n+1,sum+numbers[n]); dfs(n+1,sum-numbers[n]); } } dfs(0,0); return answer;}
1~N 사이의 숫자중 소수를 구하는 문제가 있습니다.이때let num = [];let N = 100;for(let i =1; i아래의 방법을 통해 O(N)으로 구할 수 있습니다.하지만 N이 커지면 커질수록 시간이 오래걸립니다.그렇기 때문에 에라토스테네스의 체 방법으로 소수를 구하면 빠릅니다.이 방법의 핵심은 n의 배수는 무조건 소수가 될 수 없다!let N = 100;let arr = [];for(let i = 0;i x); //=> 소수만 남아있다.