코딩테스트

[코딩테스트] 두 정수 사이의 합

이경욱 2023. 12. 4. 10:38

문제

두 정수 a, b가 주어졌을 때

a와 b 사이에 속한 모든 정수의 합을

리턴하는 함수, solution을 완성하세요.

 

예를 들어, a = 3, b = 5인 경우,

3 + 4 + 5 = 12 이므로 12를 리턴합니다.

 

 

해결

const solution = (a, b) => {
    const arr = [a, b].sort((a, b) => a - b)
    return Array
    .from({length: Math.abs(a-b)+1}, (_, i) => i + arr[0])
    .reduce((a, b) => a + b)
}

배열을 만들고 sort 메서드를 통해

낮은 수를 골랐다.

 

그리고 Array 로

a와 b의 뺀 값에서 음수를 제외하고

+ 1을 해주면 두 사의의 길이가 나온다.

 

그곳에 아까 sort 메서드로 정렬했던 배열에서

인덱싱 [0] 을 해주면 두 사이 숫자에서

가장 낮은 수를 가져올 수 있게된다.

 

배열의 길이 만큼 + i 를 해주면

두 정수 사이의 숫자를 배열로 받을 수 있게된다.

 

이제 reduce 메서드로 배열의 모든 수를

더해주면 원하는 값이 나오게 된다.

 

 

 

 

다른 사람의 풀이

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

 

Math.min을 배열이 아닌

두 숫자를 넣어서 사용할 수도 있구나를

알게해준 코드였다.

 

내가 짰던 코드도

굳이 sort 메서드를 이용하지 않고

더해주는 부분에서 Math.min을 사용했으면 됐겠다는

생각이 들었다.

 

function adder2(a, b){
    var result = (a<b)?a:b;
    while(a!=b){
      result += (a<b)?++a:++b;
    }    
    return result;
}

 

삼항연산자로 작은 수를 구별하여 변수 선언하고

while 문을 이용하여 조건이 만족할 때에만

반복문이 실행되도록 한 코드이다.

 

나에게 익숙하지 않은 방식으로

작성되었기 떄문에 알아둘 필요가 있어서

리뷰하게 되었다.