새오의 개발 기록

프로그래머스: level 1 - 두 정수 사이의 합 본문

카테고리 없음

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

새오: 2023. 1. 16. 12:56

문제 설명

 

두 정수 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의 대소관계는 정해져있지 않습니다.

 

 

입출력 예
a b return
3 5 12
3 3 3
5 3 12

 

 

 

 

풀이 

 

내 풀이

 

function solution(a, b) {
    if (a === b) return a;
    let sum = a;
    while(a !== b) {
        if (a < b ) a++;
        if (b < a ) a--;
        sum += a;
    }
    return sum;
}

 

 

 

다른 사람들의 풀이 1

 

역시 수학을 잘해야 알고리즘에 유리한가

가우스 공식 기억도 안 나는데 배우고 갑니다.. 

function adder(a, b){
    var result = 0
    return (a+b)*(Math.abs(b-a)+1)/2;
}

 

가우스 덧셈 이란

  • 가우스가 선생님께 가져온 계산법은 이러했다.
  • 첫 숫자 1과 끝 숫자 100을 더하면 101 이 된다
    두 번째 숫자 2와 끝 숫자 99를 더하면 101 이 된다.
    ...
    모두 합하여 101은 모두 50번이 된다.

    앞의 숫자와 뒤의 숫자를 더하면 모든 쌍의 합이 101이나 오며,
    그 개수는 전체 개수의 절반인 50개가 됨

 

 

가우스 덧셈 공식 정리

a ~ b까지의 숫자를 더한 합은? 

처음 숫자와, 마지막 숫자를 더한 합 = ( a + b )
더할 숫자의 개수 총합의 1/2 = ( b - a + 1) * 1/2

= ( a + b ) *  ( b - a + 1) * 1/2 

 

 

 

다른 사람들의 풀이 2

 

function adder(a, b, s = 0){
  for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
  return s;
}

Math를 잘 사용해봐야겠다..

1번 풀이 같은 경우는 사실 내가 못 떠올릴 것 같고 2번 풀이가 더 와닿는다.

 

 

 

 

참고: https://workshop-code.tistory.com/51