[programmers] 두 정수 사이의 합

HYl·2022년 4월 6일
0

두 정수 사이의 합


나의 풀이 방법 1. 가우스 공식

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

나의 풀이 방법 2. while 문

function solution2(a, b) {
  let answer = 0;

  if (a < b) {
    while (a <= b) {
      answer += a;
      a += 1;
    }
  } else {
    while (b <= a) {
      answer += b;
      b += 1;
    }
  }

  return answer;
}

나의 풀이 방법3. 2번 리팩토링

function solution2(a, b) {
  let answer = 0;
  a > b && ([a, b] = [b, a]) // 대소 관계 

  while (a <= b) {
    answer += a;
    a += 1;
  }

  return answer;
}
  • if문으로 a 와 b의 대소 관계를 나누었는 데, [a, b] = [b, a] 라는 두 숫자를 바꾸는 문법을 활용하여 나누는 것이 더 깔끔한 코드를 만들었다.

제로초님의 답안

3과 5가 주어지면 3+4+5를 해서 리턴하면 됩니다.

function solution(a, b) {
  a > b && ([a, b] = [b, a]);
  return Array(b - a + 1).fill(a).map((v, i) => v + i).reduce((a, c) => a + c);
}

5, 3과 같이 역순으로 주어지는 경우만 추가적으로 고려하면 됩니다. [a, b] = [b, a]는 두 숫자를 바꾸는 편리한 문법이므로 알아두시면 좋습니다. Array부터 시작해서 fill, map까지 이어지는 과정도 [1,2,3,4,5]이런 순차적인 숫자 배열을 만드는 방식이므로 알아두시면 좋습니다.

  • Array(b - a + 1) : a와 b 사이의 갯수 만큼 공간 만들기
    • [empty x 3]
  • fill(a) : 빈 공간 안에 a 로 채우기
    • [3, 3, 3]
profile
꾸준히 새로운 것을 알아가는 것을 좋아합니다.

0개의 댓글