두 정수 사이의 합(자바스크립트)_프로그래머스

Jason Moon·2022년 5월 13일
0

알고리즘

목록 보기
1/8

문제 설명

두 정수 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

solution.js 초기화면

function solution(a, b) {
var answer = 0;
return answer;
}

풀이👌

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

이렇게 간단하게 풀 수있었는데...나란 놈은...
아래가 내가 접근 한 방식이다.

접근 방식🤔

우선 a와 b가 주어졌을 때 a와 b를 포함해서 사이 숫자들을 먼저 구하자고 생각했다.
예를 들어, 3,5가 주어지면 3,4,5를 구함
어떻게 구할 수 있을까 생각하다가 3과 5를 빼봤는데 2가 나왔고 이걸로 어떻게 할 수 있겠는데 생각했다.
그래서 a와 b를 뺀 숫자만큼 반복문을 돌면서 3에다 하나씩 더해주면 3, 4, 5를 구할 수 있겠다 생각했다.

그래서 우선 for문을 만들어서 a와 b중 작은 수를 배열의 시작으로해서 하나씩 반복문을 돌면서 push해줬다.

let sum; // 더 해갈 수를 할당해줄 변수
// 바로 array.push(a + 1) 이런식으로 해주면 하나씩 증가하면서 배열에 들어가는게 아니라 a에 3이 인수로 들어가면 +1 해주면 [4,4,4]이런식으로 배열이 만들어 진다.
let arr = []; //하나씩 더해가면 들어갈 변수 선언 및 빈배열 할당
// 매개변수 a, b에 a가 더 큰수가 들어올 수도 있고 b가 더 큰 수가 들어올수 있다. b가 더 큰수가 들어오면 횟수를 정할 때 a가 큰 경우는 a - b b가 큰 경우는 b - a 로 적어줄 수 있는데 나는 Math의 abs함수를 사용해 Math.abs(a-b)이렇게 해줬다.
if (a < b) {
    sum = a;
    arr = [a];
    for (let i = 0; i < Math.abs(a - b); i++) {
      sum = sum + 1;
      arr.push(sum);
    }
 b가 a보다 큰 경우 (예) 3, 5 ) a를 제일 먼저 sum에 할당하고 배열 arr에도 [a]를 할당해 놓는다. 그리고 for문을 돌면서 sum은 a+1이 되고 배열에 sum을 push한다. 그럼 배열은 [a, a+1]이 되고 그다음 반복때는 sum은 a+1+1이 되고 배역은 [a, a+1, a+1+1]이 된다.
이렇게 두 수가 주어졌을 때 두 수 사이까지 포함하는 수를 가져왔다.

a < b보다 작을 때 a와b가 같을 때도 고려해 코드를 짜면

  let sum;
  let arr = [];
  if (a < b) {
    sum = a;
    arr = [a];
    for (let i = 0; i < Math.abs(a - b); i++) {
      sum = sum + 1;
      arr.push(sum);
    }
  } else if (a > b) {
    sum = b;
    arr = [b];
    for (let j = 0; j < Math.abs(a - b); j++) {
      sum = sum + 1;
      arr.push(sum);
    }
  } else {
    arr = [a]; // a와 b가 같을 때는 그냥 하나의 수만 배열에 들어가면 된다. 중간 값이 없으므로
  }
 

이제 두 수 사이에 값까지 포함해서 필요한 숫자들은 다 구했다.
남은 건 배열을 더해주기만 하면 된다.

answer = arr.reduce((prev, current) => prev + current, 0);
return answer;

reduce를 이용해 배열의 합을 구해줬다.

(reduce 따로 정리해야겠다)

회고😓

아주 간단하게 풀 수 있는 문제였는데 처음 접근 방식에 사고가 갇혀서 하나 하나 다 구해줬다. 처음 떠오른 생각에 바로 접근하지 말고 다른 접근 법은 없을지 한 번더 생각해보자

profile
어려워 보여도 시간을 들여서 해보면 누구나 할 수 있는 일이다

0개의 댓글

관련 채용 정보