연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
https://school.programmers.co.kr/learn/courses/30/lessons/120923
나의 문제풀이
function solution(num, total) {
let pointNum = 0;
let arr = [];
let idx = 0;
if (num % 2 !== 0) {
pointNum = total / num;
arr.push(pointNum);
for(cnt=1; cnt<num; cnt+=2) {
idx++;
arr.push(pointNum + idx)
arr.unshift(pointNum - idx)
}
} else {
pointNum = total/(num/2)
for(cnt=0, idx=0; cnt<num; cnt += 2, idx++) {
arr.push(Math.ceil(pointNum/2) + idx)
arr.unshift(Math.floor(pointNum/2)-idx)
}
}
return arr
}
홀수의 경우 total에 num을 나눠서 센터값을 구해주고, 센터값을 기준으로 앞 뒤로 인자를 넣어주는 방식으로 코드를 구성했다.
짝수는 홀수와 조금 다르지만 작동방식은 동일하다고 보면 된다.
열심히 오류와 함께하면서 다풀고 난 후 아무리 생각해도 이렇게 푸는게 아닌거 같아서 다른사람의 풀이를 봤다.
다른 사람의 문제풀이
function solution(num, total) {
const a = (2 * total / num + 1 - num) / 2
return Array(num).fill().map((_, i) => i + a)
}
fill()
메소드로 채워주는 방식으로 구현했다.알고리즘 문제를 10문제정도 풀었는데 가장 기억에 남는 문제라 남겨본다. 저 문제를 풀겠다고 등차수열이랑 가우스 알고리즘도 찾아보고 생각도 잘 안나는 옛날에 배웠던 공식이라 더 헤맸던것 같다.