본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 두 정수 사이의 합 문제 풀이 및 설명 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 13.
728x90

https://programmers.co.kr/learn/courses/30/lessons/12912

 

코딩테스트 연습 - 두 정수 사이의 합

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우

programmers.co.kr

 

문제

두 정수 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) {
    var answer = 0;
    return answer;
}

 

풀이 [JavaScript]

 

728x90

 

가장 처음에는 아래와 같이, 두 값의 크기를 비교해서 각각의 케이스에 맞게 for문을 돌도록 구조를 짰었다.

하지만 이 구조는 효율적이지 못한것 같아 다시 수정해보았다.

function solution(a, b) {
    var sum = 0;
    if( a >= b ){
        for ( var i = b; i <= a; i++ ){
            sum += i;
        }
    }else{
        for ( var j = a; j <= b; j++ ){
            sum += j;
        }
    }
    return sum;
}

 

아래는 for문을 한 번만 사용하기 위해, 삼항연산자를 이용하여, start값과 end 값을 a, b의 크기에 따라 알맞게 지정해주었다.

하지만 이렇게 쓰는 삼항연산자는 본래의 삼항연산자의 사용 목적과 다르다는 것을 알게되었다.

본디 삼항 연산자는, 앞에 값을 대입하기 위하여 사용하는 것인데, 나는 if, else문을 사용해도 되는 것을 굳이 삼항연산자로 쓴 것이기 때무문에 잘못된 사용방법이었다.

앞에 값을 대입하기 위한다는 것은, var verifiedValue = a > 10 ? 'verified': 'invalid'와 같이, 조건문에 맞게 값을 앞부분에 대입하기위해 삼항연산자를 쓴다는 것이다.

 

function solution(a, b) {
    var sum = 0;
    var start = 0;
    var end = 0;
    a >= b ? (start = b, end = a) : (start = a, end = b);
    for(var i = a; i <= b; i++){
        sum += i;
    }
    return sum;
}

 

그래서 다시 아래와 같이 a와 b의 값을 비교해서 a가 더 큰 경우에는 a, b값을 서로 바꿔주도록 수정해보았다.

자바스크립트에서는 a, b값을 바꾸는 더 간단한 방법이 있어 그 방법을 추가적으로 적용해보았다.

 

function solution(a, b) {
    var sum = 0;
    if(a >= b){
        var tmp = a;
        a = b;
        b = tmp; 
    } 
    for( var i = a ;  i <= b; i++){
        sum += i;
    }
    return sum;
}

 

아래는 a가 b보다 클 경우, a, b를 바꾸는 방식인데, 자바스크립트에서는 아래와 같이 간단하게 [a, b] = [b, a];와 같은 방식으로 값을 바꿀 수 있다. 그래서  a값이 큰 경우, a와 b값을 스왑해주고 작은 값에서부터 큰 값까지의 value를 합해주면 원하는 결과값이 나오는 것을 확인할 수 있다.

 

function solution(a, b) {
    var sum = 0;
    if( a >= b ) [a, b] = [b, a];
    for(var i = a; i <= b; i++){
        sum += i;
    }
    return sum;
}

 

채점 결과 [JavaScript]

 

728x90

댓글