[프로그래머스_JavaScript] 두 정수 사이의 합 문제풀이

Yun's·2022년 1월 14일
post-thumbnail

🔔 해당 문제

💻 두 정수 사이의 합 (클릭)


📖 문제 설명

두 정수 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의 대소관계는 정해져있지 않습니다.

🤔 입출력의 예


📝 풀이1


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

알고리즘 문제를 처음 접해봤다. 어떻게 푸는건지 감도 안 잡히는지라 이것저것 하다가 결국 답변을 먼저 보고 어떤식으로 작성하는건지 알아봤다 지금 수준에서 이해를 해볼 수 있겠다 싶은 답변이 바로 위의 코드이다.

대소 관계가 정해져 있지 않으니 조건문으로 아래와 같이 나눠야 한다.
a가 b보다 작거나 같을 때 -> 1씩 더해주기
a가 b보다 클 때 -> 1씩 더해주기
조건문에 따라 반복된 값들(a와 b 사이의 값들)을 모두 더해 return하는 방식이다

이 문제의 다른 풀이들을 봤는데
아주 간결하게 해결하신 분들이 많았다.

🍒 참고하면 좋을 자료 🍒

📘 좀 더 간결한 풀이 (클릭)
📘 등차수열의 합 공식 이용 + 최댓값, 최솟값 이용 (클릭)
📘 등차수열의 합 공식 자세한 설명 (클릭)

너무 오랜만에 보는 등차수열, 가우스 공식이란 단어,,,
일찍이 수포자였던 나란 사람,,
놀란 마음 진정시키느라 힘들었다,,,하하하

📝 풀이2


function solution(a, b) {
     return ((a+b) * (Math.abs(b-a) + 1)) / 2;
}
등차수열이 이런건데 a=1 b=10 이라고 가정했을 때

2S = (1+10) + (2+9) + (3+8) + ... + (8+3) + (9+2) + (10+1)
2S = 11 + 11 + ... + 11 + 11
2S = 11 * 10
S = 55

1부터 10을 더하는데 헷갈리니까 그냥 대칭으로 다 더하고 2로 나누면
1부터 10까지 합 더 쉽게 구할 수 있지않니?
(지금은 1에서 10이어도 나중에 1에서 100이라면?!)

이런느낌으로,,, 푸는 건데 얼마나 많은 효율적인 공식들을 아느냐에 따라서
코드의 줄이 아주 짧아질 수고, 길어질 수도 있다는 것에 자괴감(?) 이라 해야하나
암튼 개발자의 세계란,, 멀고도 험난한 것 같다는 것을 다시 한번 느끼는 순간이었다...!!!!!

알고리즘 공부 더더더 많이 해야겠다 휴,,


profile
우당탕탕 알다가도 모를 코딩 Life

0개의 댓글