728x90
반응형
연속된 수의 합
문제설명 :
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한 사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
num | total | result |
3 | 12 | [3, 4, 5] |
5 | 15 | [1, 2, 3, 4, 5] |
4 | 14 | [2, 3, 4, 5] |
5 | 5 | [-1, 0, 1, 2, 3] |
첫번째 접근
: i 부터 1씩 뺀 숫자 num개를 더했을때 total이 나오면 return 하도록 했다. 테스트 케이스는 통과했지만 최종 통과되지 못했다.
function solution(num, total) {
let sum = 0
let answer = []
for(let i = 1; i < total; i++){
for(let j = 0; j < num; j++){
sum += i - j
answer.unshift(i-j)
}
if(sum === total) return answer
else {
sum = 0
answer = []
}
}
}
두번째 접근
: 문제의 예시를 보니 num이 짝수인 경우와 홀수인 경우에서 규칙이 있었다. num이 짝수인 경우, 예를들어 4인 경우 total/num 의 몫이 answer 배열의 두번째에 위치했고, 홀수인 경우 배열 중앙에 위치했다. 이 규칙을 이용해 문제를 풀었다. 먼저 total/num의 몫을 구했고 몫에 num/2를 더해 max에 할당했다. 그리고 answer 배열의 길이가 num이 될때까지 배열에 넣어주었다. 이때 unshift를 사용한 이유는 answer 배열을 오름차순으로 정렬해야하므로 배열의 앞에 숫자를 넣어주었다. 통과했다.
function solution(num, total) {
let quotient = Math.trunc(total/num)
let answer = []
let max = quotient + Math.floor(num/2)
while(answer.length !== num){
answer.unshift(max)
max--
}
return answer
}
solution
function solution(num, total) {
var min = Math.ceil(total/num - Math.floor(num/2));
var max = Math.floor(total/num + Math.floor(num/2));
return new Array(max-min+1).fill(0).map((el,i)=>{return i+min;});
}
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
JS Practice) 프로그래머스 : 겹치는 선분의 길이 (1) | 2023.05.03 |
---|---|
JS Practice) 프로그래머스 : 안전지대 (0) | 2023.05.02 |
JS Practice) 프로그래머스 : 다음에 올 숫자 (1) | 2023.04.28 |
JS Practice) 프로그래머스 : 분수의 덧셈 (0) | 2023.04.27 |
JS Practice) 프로그래머스 : OX퀴즈 (0) | 2023.04.26 |