본문 바로가기

CS

(45)
[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..
[230327] 구명보트: Greedy 알고리즘 탐욕 알고리즘(Greedy Algorithm) greedy: 탐욕스러운, 욕심이 많은 즉, 매 순간 가장 좋아 보이는 것만 선택하며, 현재 선택이 나중에 미칠 영향에 대해서는 고려하지 않음 기준에 따라 좋은 것을 선택하는 알고리즘이므로, 문제에서 ‘가장 큰 순서대로’, ‘가장 작은 순서대로’와 같은 기준이 제시된 경우에 응용한다. 예제: 거스름돈 🧸 문제 당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리의 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수를 구하라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다. 문제 해설 동전의 최소 개수를 구해야 하는 문제이므로, 가장 큰 ..

반응형