https://school.programmers.co.kr/learn/courses/30/lessons/120923
//test
const num = 3;
const total = 12;
sol1
function solution(num, total) {
let answer = [];
let ceilNum = Math.ceil(total / 2);
while (true) {
for (let i = num; i > 0; i--) {
answer.push(ceilNum - i);
}
let sum = answer.reduce((acc, cur) => acc + cur, 0);
if (sum === total) break;
else if (sum < total) ceilNum++;
else ceilNum--;
answer = [];
}
return answer;
}
연속된 수의 합은 평균에서 오차범위를 줄여가며 찾으면 된다. Test 변수를 예로 들면
// 편의상 배열의 합계산은 생략했다.
// average : 6
[4,5,6] !== total;
//average : 5
[3,4,5] === total // answer
이 경우는 평균을 기준으로 내려간 숫자 배열의 합이 total 보다 큰 경우이지만 total 보다 작아지는 경우도 고려해야 한다.
const num = 4;
const total = 2;
//average : 1
[ -2, -1, 0, 1 ] !== total
//average : 2
[ -1, 0, 1, 2 ] === total //answer
첫번째 예시와는 달리 평균을 올려줘야 하는 경우이므로, while 문 안에서 total === sum 일 경우 답을 출력하지만 그 외 total이 더 작을 경우 더 클 경우를 모두 고려해줘야 한다.
'Study > Algorithm' 카테고리의 다른 글
[programmers / JavaScript] 햄버거 만들기 (0) | 2023.07.07 |
---|---|
[BEAKJOON / node.js] 26069 붙임성 좋은 총총이 (0) | 2022.11.19 |
[BEAKJOON / node.js] 16120 PPAP (0) | 2022.07.11 |
[BEAKJOON / node.js] 11509 풍선 맞추기 (0) | 2022.07.06 |
[BEAKJOON / node.js] 1946 신입 사원 (0) | 2022.07.04 |