본문 바로가기
코테연습

77. 두 정수 사이의 합 Javascript

by hxunz 2022. 7. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/12912?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 주어진 두 정수 사이의 합을 구하라
  • 주어진 자료는 무엇인가?
    - 정수 a, b
  • 조건은 무엇인가?
     -
    a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
     - a와 b의 대소관계는 정해져있지 않습니다.

2. 계획

  • 전에 비슷한 문제를 알고 있는가?
     - 약수의 개수와 덧셈 문제
  • 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
     - reduce
  • 비슷한 문제를 풀어본 적이 있다면 그 것을 활용할 수 있는가?
     - 약수의 개수와 덧셈 문제에서 사용했던 두 정수 사이의 수들을 구하는 함수를 사용할 수 있을 것 같다.
  1. 주어진 두 정수 사이의 모든 숫자들을 담은 배열을 만든다
  2. 이 사이의 숫자들을 더한다. 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (a, b) => {
  let numbers = [];

  if (a < b) {
      for (num = a; num <= b; num++) {
      numbers.push(num);
    }
  } else {
    for (num = b; num <= a; num++) {
      numbers.push(num);
    }
  }
  
  return numbers.reduce((acc, cur) => acc + cur, 0);
};

test('sumNumbers', () => {
  expect(solution(3, 5)).toEqual(12);
  expect(solution(5,3)).toEqual(12);
});

4. 반성

  • 문제를 다른 방식으로 해결할 수 있는가?
     - 가우스 공식
const solution = (a, b) => {
  return (a + b) * (Math.abs(b - a) + 1) / 2;
};

 

 

되게 쉽다고 생각하고 빠르게 풀었는데 가우스 공식을 사용하는 완전 간단한 방법이 있다는 것을 알게 되었다.
양 끝 수 더한 값과 두 정수 사이의 중간값을 곱하면 
주어진 정수 사이의 모든 숫자들을 더한 값과 동일하다. 
이 공식을 사용하게 되면 굳이 정수 사이의 모든 숫자들을 구하지 않아도 되고 
모든 숫자들을 일일히 더하지 않아도 된다는 이점이 있다. 

댓글