본문 바로가기
알고리즘/프로그래머스 문제-JS

[JS]두 정수 사이의 합

by sweesweet 2022. 5. 31.

첫번째 시도

하나씩 더하는 것이기 때문에, 이 경우에는 엄청나게 숫자가 크다면 오래걸릴 수 밖에 없다

function solution(a, b) {
   let answer=0
if(a>b){
    [a,b]=[b,a] // a가 b보다 크다면 a와 b값 체인지
}
  for(let i=a;i<=b;i++){
      answer+=i // 계속 더해주기
  }
   return answer
}
더보기
테스트 1 통과 (0.05ms, 29.8MB)
테스트 2 통과 (0.06ms, 30.1MB)
테스트 3 통과 (0.06ms, 29.9MB)
테스트 4 통과 (25.86ms, 32.7MB)
테스트 5 통과 (19.53ms, 32.6MB)
테스트 6 통과 (16.12ms, 32.7MB)
테스트 7 통과 (8.63ms, 32.5MB)
테스트 8 통과 (12.30ms, 32.6MB)
테스트 9 통과 (12.58ms, 32.6MB)
테스트 10 통과 (3.66ms, 32.2MB)
테스트 11 통과 (0.23ms, 30.1MB)
테스트 12 통과 (0.58ms, 30.2MB)
테스트 13 통과 (0.24ms, 30.1MB)
테스트 14 통과 (0.10ms, 30MB)
테스트 15 통과 (0.07ms, 30.2MB)
테스트 16 통과 (0.11ms, 30.1MB)

 

 

두번째 시도

다른사람의 풀이 댓글에 갓 가우스 어쩌구를 보고 해당 풀이는 풀지 않은 채 풀어보았다

function solution(a, b) {
   let answer=0
   if((a-b)%2===0||(a-b)!==0){ //a-b가 짝수인 경우(사이에 있는 수의 갯수가 홀수가 됨)
      return (Math.abs(a-b)/2+0.5)*(a+b)// 하나는 짝이 없기때문에 0.5를 했다
      }
    else{
        return(Math.abs(a-b)*(a+b))//사이에있는 수의 갯수가 짝수이기때문에 그냥(a-b)만큼 (a+b)곱해주면 됨
    }
   
}

 

더보기

 

테스트 1 통과 (0.04ms, 30.1MB)
테스트 2 통과 (0.04ms, 29.8MB)
테스트 3 통과 (0.05ms, 30MB)
테스트 4 통과 (0.04ms, 30.2MB)
테스트 5 통과 (0.04ms, 30MB)
테스트 6 통과 (0.05ms, 30.2MB)
테스트 7 통과 (0.04ms, 29.8MB)
테스트 8 통과 (0.04ms, 30.1MB)
테스트 9 통과 (0.04ms, 29.8MB)
테스트 10 통과 (0.05ms, 30.1MB)
테스트 11 통과 (0.13ms, 30MB)
테스트 12 통과 (0.05ms, 30.1MB)
테스트 13 통과 (0.04ms, 30.1MB)
테스트 14 통과 (0.04ms, 30MB)
테스트 15 통과 (0.04ms, 30MB)
테스트 16 통과 (0.07ms, 30.3MB)

 

세번째 시도

또 댓글을 보니 등차수열 어쩌고 있길래 풀이를 보지않고 풀어보았다

function solution(a, b) {
   if(a>b){
       [a,b]=[b,a]//(a가 b보다 크다면 둘의 값 스위치)
   }
   return (b-a+1)*(b-a+2)/2+(a-1)*(b-a+1)
   // (b-a)를 하게되면 총 갯수보다1개가 부족하다
   // 예 3,5 일때 3,4,5 총 3개이지만 (b-a)는 2인걸 볼 수 있다
   //등차수열의 합 n(n+1)/2를 이용하여 (b-a+1)*(b-a+2)/2
   // 상수의 합은 상수의 갯수 상수*n이지만 등차수열은 1부터 시작했을때 n*n+1/2이기 때문에
   // 상수*n -> (a-1)*(b-a+1)로 하였다
}
더보기
테스트 1 통과 (0.04ms, 30.2MB)
테스트 2 통과 (0.04ms, 30MB)
테스트 3 통과 (0.08ms, 30.1MB)
테스트 4 통과 (0.04ms, 30.1MB)
테스트 5 통과 (0.05ms, 30MB)
테스트 6 통과 (0.04ms, 30.1MB)
테스트 7 통과 (0.04ms, 30.2MB)
테스트 8 통과 (0.04ms, 30.2MB)
테스트 9 통과 (0.07ms, 30MB)
테스트 10 통과 (0.05ms, 29.9MB)
테스트 11 통과 (0.06ms, 29.7MB)
테스트 12 통과 (0.05ms, 30.1MB)
테스트 13 통과 (0.04ms, 29.9MB)
테스트 14 통과 (0.05ms, 30MB)
테스트 15 통과 (0.04ms, 30MB)
테스트 16 통과 (0.04ms, 30MB)