Skip to content

Latest commit

 

History

History
58 lines (49 loc) · 2.17 KB

File metadata and controls

58 lines (49 loc) · 2.17 KB

연속된 수의 합

프로그래머스

문제

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 numtotal이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

제한사항

  • 1 ≤ num ≤ 100
  • 0 ≤ total ≤ 1000
  • num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

제출 코드

function solution(num, total) {
  if (num === 1) return [total];
  if (num % 2 !== 0) {
    const answer = [];
    const median = total / num;
    answer.push(median);
    const plusMinusValue = (num - 1) / 2;
    for (let i = median - 1; i >= median - plusMinusValue; i--) {
      answer.unshift(i);
    }
    for (let i = median + 1; i <= median + plusMinusValue; i++) {
      answer.push(i);
    }
    return answer;
  }
  const answer = [];
  const leftMedian = parseInt(total / num);
  const rightMedian = leftMedian + 1;
  const plusMinusValue = (num - 2) / 2;
  answer.push(leftMedian);
  answer.push(rightMedian);
  for (let i = leftMedian - 1; i >= leftMedian - plusMinusValue; i--) {
    answer.unshift(i);
  }
  for (let i = rightMedian + 1; i <= rightMedian + plusMinusValue; i++) {
    answer.push(i);
  }
  return answer;
}

풀이 과정

  • num이 1인 경우, 짝수인 경우, 홀수인 경우로 나눠서 생각할 수 있다.
  • num이 1인 경우, 바로 [total]을 반환한다.
  • num이 홀수인 경우, totalnum으로 나눈 값이 정수 배열의 중앙값이 된다.
    • 이 중앙값을 먼저 배열 안에 넣는다.
    • 이후 중앙값의 좌우로 (num - 1) / 2 만큼을 채워넣고 정수 배열을 반환한다.
  • num이 짝수인 경우, totalnum으로 나눈 몫이 정수 배열의 중앙의 두 값 중 왼쪽 값이 된다.
    • 중앙의 두 값 중 왼쪽 값과 1을 더한 값(중앙의 오른쪽 값)을 배열에 넣는다.
    • 이후 중앙 두 값의 좌우로 (num - 2) / 2 만큼을 채워넣고 정수 배열을 반환한다.