[프로그래머스] Level1. 두 정수 사이의 합

Benjamin·2023년 3월 6일
0

프로그래머스

목록 보기
37/58

내 풀이

class Solution {
    public long solution(int a, int b) {
        if(a>b) {
            int temp = a;
            a= b;
            b= temp;
        }
        long answer = 0;
        for(int i=a; i<=b; i++) {
            answer += i;
        }
        return answer;
    }
}

1~n까지의 합 공식 = n*(n+1)/2 를 썼다가 음수를 처리못해서 틀렸고 결국 그냥 반복문을 사용했는데 혹시 수학적으로 다른 풀이가있을까 살펴봤다.

다른 풀이

class Solution {

    public long solution(int a, int b) {
        return sumAtoB(Math.min(a, b), Math.max(a, b));
    }

    private long sumAtoB(long a, long b) {
        return (b - a + 1) * (a + b) / 2;
    }
}
  • a가 b보다 큰 수 일때 처리하는 코드도 훨씬 간단하다.
    swap로직대신 메서드를 사용했다.
    Math.min()Math.max()를 기억하자.

  • a~b사이의 합은 등차수열의 합공식을 이용했다.

    n : 항의 수, a : 첫째항, d: 공차

0개의 댓글