본문 바로가기

CS/알고리즘

(38)
[230416] 가장 가까운 같은 글자 문제 풀이 내 풀이 function solution(s) { return [...s].map((text, idx) => { const char = s.slice(0, idx + 1); if(char.indexOf(text) === char.lastIndexOf(text)) return -1; return idx - s.slice(0, idx).lastIndexOf(text); }) } 반복문을 돌리고, 문자열에서 index만큼 문자열의 앞부분을 자른다. 자른 문자열에서 해당 문자열이 한 번 있으면 -1를 반환. indexOf와 lastIndexOf가 동일하면, 한 번만 있다는 의미 그게 아니라면, index에서 index를 포함하지 않는, 앞까지 자른 문자열에서 마지막에 위치한(lastIndexOf) 인..
[230416] 푸드 파이트 대회 문제 풀이 내 풀이 function solution(food) { let answer = ''; for(let i = 1; i < food.length; i++) { answer += (i+'').repeat(parseInt(food[i] / 2)) } const reverse = Array.from(answer).reverse().join(''); return answer + '0' + reverse } 각 음식을 2로 나눈 정수 값만큼 repeat해서 answer에 문자열을 추가하였다. 그 문자열을 거꾸로 뒤집은 값을 reverse에 담고, answer + '0' + reverse 값을 결과값으로 반환한다. 다른 풀이도 살펴보니 동일한 방식으로 풀이하였다.
[230416] 점프와 순간 이동 문제 풀이 이번 문제는 못풀겠어서 질문하기를 통해 힌트를 보고 말았다 (ㅠㅠ) n이 1이 될 때까지, n을 2를 나누고 2로 나누어지지 않으면 -1하고, answer++한다. function solution(n) { let answer = 0; while(n > 0) { if(n % 2 === 1) { answer++; n--; } else { n /= 2; } } return answer; } 다른 풀이 2진수로 변환하고, 그것을 배열로 변환 1인 부분이 2로 나눴을 때 나머지가 있는 부분. 따라서 배열에 있는 수들을 모두 더한(reduce) 수가 정답이다. function solution(n) { if(n === 1) return 1; const nArr = Array.from(n.toString(2..
[230414] N개의 최소공배수 문제 풀이 function solution(arr) { const getGCD = (a, b) => a % b === 0 ? b : getGCD(b, a % b); const getLCM = (a, b) => a * b / getGCD(a, b); return arr.reduce((a,b) => getLCM(a, b)); } 이전에 유클리드 호제법을 이용한 최대공약수(GCD), 최소공배수(LCM) 공식을 이용하여 풀이했다.
[230414] 예상 대진표 문제 풀이 function solution(n, a, b) { let answer = 0; while(a !== b) { a = Math.ceil(a / 2); b = Math.ceil(b / 2); answer++; } return answer; } a와 b를 /2하고, Math.ceil()한 값이 동일하면 그만 answer ++; 다른 사람의 풀이에서도 동일하게 풀이했더라..
[230413] 크기가 작은 부분문자열 문제 풀이 function solution(t, p) { let answer = 0; for(let i = 0; i < t.length - p.length + 1; i++) { const tNum = t.slice(i, i + p.length); if(+tNum
[230412] 카펫 문제 풀이 첫 풀이 function solution(brown, yellow) { const sum = brown + yellow; const sqrt = Math.sqrt(sum); if(sum % 2 === 1 && sqrt === sum / sqrt) return [sqrt, sqrt]; let min = 1 + sum; const answer = []; for(let i = 2; i pairSum) { min = pairSum answer[0] = Math.max(sum/i, i); answer[1] = Math.min(sum/i, i); }; } return answer; } 테스트 4, 6, 7, 8 불통 질문하기에서 불통인 이유를 살펴보니 다음과 같은 이유였다. 프로그래머스 코드 중심의 개발..
[230411] 피보나치 수 문제 풀이 첫 풀이 function solution(n) { return fibo(n) % 1234567; } const fibo = (n) => { if(n === 0) return 0; if(n === 1) return 1; if(n === 2) return 1; return fibo(n-1) + fibo(n-2); } 예상했겠지만, 이미 구한 피보나치 수를 또다시 구하는 구조이기 때문에 시간 초과가 발생해서 통과하지 못한다. 두 번째 풀이 이미 구한 피보나치 수는 배열(fiboArray)에 저장하는 구조로 재작성하였다. const fiboArray = [0, 1, 1]; function solution(n) { return fibo(n); } const fibo = (n) => { if(fiboAr..

반응형