[프로그래머스] 두 정수 사이의 합

개발잘하기프로젝트·2020년 11월 10일
0
post-thumbnail

🤔 문제

프로그래머스 - 두 정수 사이의 합

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

❗️ 제한

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

💡 접근

두 정수사이의 길이 len를 구하고 반복문을 통해 그 길이만큼 순회하여 배열 arr에 담았다. 길이가 음수가 나올 수 있기 때문에 절대값을 이용했다. 반복문이 끝나고 배열의 각 요소의 합을 계산해서 리턴했다.

solution 1의 경우 단순 반복문을 통해 계산해준 결과이다. solution 2는 등차수열의 합 공식을 이용한 방법으로 훨씬 간단하게 문제를 해결할 수 있었다.

등차수열의 합
등차수열의 제 n항부터 제 m항까지의 합을 S, 제 n항이 a, 제 m항이 b 일 때 수식은 다음과 같다.

S=(ab+1)(a+b)/2S = (|a - b| + 1) * (a + b) / 2

🧑🏻‍💻 코드

// solution 1
function solution(a, b) {
  let arr = [];
  const len = Math.abs(a - b) + 1;
  for (let i = 0; i < len; i++) {
    if (a === b) {
      arr.push(a);
    }
    if (a < b) {
      arr.push(a);
      a++;
    }
    if (a > b) {
      arr.push(b);
      b++;
    }
  }
  const answer = arr.reduce((a, b) => a + b, 0);
  return answer;
}

// solution 2
function solution(a, b) {
  return ((a + b) * (Math.abs(a - b) + 1)) / 2;
}

solution(3, 5); // 12
solution(-10, 1); // -54

📝 참고

MDN - Math.abs()

profile
🏠 ☕️ 🎞 🌿 + 🧑🏻‍💻

0개의 댓글