Problem Solving/프로그래머스

[프로그래머스/JavaScript] 두 정수 사이의 합

세고래 2021. 5. 10. 15:19

programmers.co.kr/learn/courses/30/lessons/12912?language=javascript

 

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

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

programmers.co.kr


1) 풀이

자바스크립트로 푸는 두번째 문제😁

그래서 풀이는 다소 지저분하고 서툴어보이고 잘 모릅니당. 

혹시나 지나가다가 더 효율적이거나 더 좋은 아이디어가 있다면 댓글 남겨주시면 감사하겠습니다.

 

이 문제는 풀이 자체는 굉장히 단순하게 풀릴 수밖에 없다.

주어지는 a,b 중에서 상대적으로 작은 값부터 상대적으로 큰 값까지 그냥 수를 더해서 출력하면 된다.

가령, a가 3이고 b가 5라면 3+4+5=12, 12를 출력하면 된다.

만약, a와 b의 값이 같다면 그 둘 중 아무 수나 출력하면 된다.

 

경우는 세 가지로 나누어 코드를 짤 수 있다.

(주어지는 두 수를 a, b 라고 하자)

1. a===b

2. a<b

3. a>b

 

일단 1의 경우 두 개 중 아무거나 출력하면 된다.

2, 3의 경우도 단순하게 for 문을 통해 더한 값을 출력하면 되지만,

javascript를 배우고 있는 입장이기 때문에 reduce 함수를 사용해보기로 했다!

 

(그러기 위해서는 a부터 b까지의 수를 전부 넣은 배열이 필요하다.

사실 반복문을 쓰는 것보다 굉장히 돌아가는 방법이지만, 배우는 입장에서 연습해보는 건 나쁘지 않다고 생각)

 

reduce 함수에 대한 설명은 '3) 참고자료' 에 첨부해두겠다!

개인적으로 설명과 함께 여러 예제도 보여줘서 좋은 글이라고 생각한다.

 

이렇게 무난하게 코드를 다 짜고 돌렸는데 error 가 떠서 굉장히 당황스러웠다.

이것저것 고치다가 알게 됐는데, 멍청하게 배열 변수를 초기화해주지 않았다.

배열변수를 new Array나 []로 초기화주지 않는 이상, 배열 변수에 변수를 넣는 push()함수는

사용할 수 없기 때문에 이것을 좀 주의하면 좋겠다!

나처럼 몽총한 행동을 하는 사람이 좀 줄기를 바라며..🙏

 

2) 최종 소스코드
function solution(a, b) {
    let answer = 0; //정답으로 출력할 변수
    if(a===b){
        answer=a; // a와 b 중 아무거나 넣으면 됨
    }
    else if(a<b){
    let arr=[]; //a부터 b까지의 수를 넣을 배열
    for(let i=a;i<=b;i++){
        arr.push(i);
    }
    answer=arr.reduce((tmp,cur,i,arr)=>{
        return tmp+cur;
    });
    }
    else{
    let arr=[];//b부터 a까지의 수를 넣을 배열
    for(let i=b;i<=a;i++){
        arr.push(i);
    }
    answer=arr.reduce((tmp,cur,i,arr)=>{
        return tmp+cur;
    });
    }
    return answer;
}
3) 참고자료

blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=221877924629

728x90