문제 설명 문제 풀이 방법 이 문제의 설명에서 게임에 참여한 사람들이 지게되는 3가지 조건을 말했다. 1. 앞 사람이 말한 말의 끝에 문자를 시작문자로 하지 않았을 때. 2. 본인 이전의 사람이 말했던 말을 중복해서 말했을 경우. 3. 한가지 문자로 이루어진 말을 했을 경우 그리고 1번째로 탈락한 사람이 발생한 경우 바로 그 사람의 번호와 몇번째 횟수에서 탈락했는지 반환한다. 이를 위해 for문 안에 탈락자를 저장하는 배열의 길이를 측정해 예외 처리 했다. 또한 탈락한 사람이 없는 경우는 [0, 0]을 반환 하도록 했다. 내가 작성한 코드 const solution = (n, words) => { let answer = []; for(let i=0; i 0){ if( words[i][0] !== word..
문제 설명 문제 풀이 방법 처음에 문자열로만 접근하려 했는데 생각해보니 스택으로 접근하면 더 빠르게 될거 같아 접근법을 바꿨다. 아무래도 문자열의 길이가 1,000,000 까지다 보니 너무 길다 생각했다. 문자열로 접근해 풀게되면 문자열을 배열로 바꾸고, for문을 사용하고 그 안에 splice를 사용하기에 시간 복잡도가 높게 나올거 같았다. stack으로 접근하면 for문 한번만 돌면 되기에 시간 복잡도가 낮게 나올것이다. 내가 작성한 코드 const solution = (s) => { let arr = []; for(let i=0; i
문제 설명 문제 풀이 방법 피보나치 수를 구하는 방법은 내가 이전에 정리한 글을 참고해 DP접근법으로 문제를 해결하려했다. top-down방법은 시간초과가 발생해 통과하지 못했고, down-top으로 풀어봤지만 이 역시 마찬가지 였다.... 계속 고민해 보았지만 결국 다른 사람들이 질문한 글을 봤다. 가장 잘 설명된 글에서 이렇게 말했다. 피보나치 수가 78번째 정도만 되어도 정수 범위가 JS에서 허용하는 범위보다 커져 에러가 발생한다. 이를 방지하기 위해 문제에서 "1234567을 나눈 나머지를 리턴" 이라는 조건을 부여한것이다. 이때 글에 나온 %의 속성이 많이 흥미로웠다. (A+B)%C = ((A%C) + (B%C))%C 라는 속성이다. 이 의미가 무엇인가 하면 1, 1, 2, 3, 5, 8에서 (..
문제 설명 문제 풀이 방법 이 문제에서 중요하게 봐야할 것은 split 메서드의 사용법이다. n을 2진수로 만든다음 spilt("1")로 문자열을 배열로 만들어준다. 이때, 1의 개수보다 많이 나올 수 있는데 이것은 1을 기준으로 나누었기 때문에 1 앞뒤에 있는 요소가 반환되었기 때문이다. while문을 통해 n++하며 반복해준다. 이때 위와 같은 방법으로 배열의 길이를 측정해 주어진 n의 경우와 같다면 반복하며 1씩 늘어난 n을 반환해준다. 내가 작성한 코드 const solution = (n) => { let answer = 0; let n1 = n.toString(2).split("1").length; while(true){ n++ if(n.toString(2).split("1").length ==..
문제 설명 문제 풀이 방법 가장 작은 예산부터 더해줘서 지원 가능한 부서의 수를 구해야 한다. sort를 이용해 예산 배열을 정렬해주고 0인덱스 부터 for문으로 더해주며, 예산을 넘어가면 이전의 부서 까지의 부서 수를 반환한다. for break를 이용해 효율성을 조금 더 높여준다. 내가 작성한 코드 function solution(d, budget) { d.sort((a, b) => a - b); let cnt = 0; let sum = 0; for(let i=0; i
문제 설명 문제 풀이 방법 이 문제는 주어지는 수의 약수 중 홀수인 약수의 개수만큼이 답이된다. 또한 중첩 반복문(2중 for문)을 이용해 반복하며 더한 값을 비교해 총 값이 n이 되는 경우의 수를 반환한다. 이렇게 2개의 방법으로 답을 도출할 수 있다. 내가 작성한 코드 1 const solution = (n) => { let answer = 0; for(let i=1; i { let answer = 1; let sum = 0; for(let i=1; i