[프로그래머스] 두 정수 사이의 합, 짝수의 합

NCOOKIE·2025년 3월 6일
0

알고리즘

목록 보기
32/34

두 정수 사이의 합
짝수의 합

위의 두 문제 모두 등차수열의 합 공식을 사용해 간단하게 풀 수 있다.

두 정수 사이의 합

class Solution {
    public long solution(int a, int b) {
        if (a == b) {
            return a;
        }
        
        int min = a < b ? a : b;
        int max = a > b ? a : b;
        
        // 등차수열 합 공식 -> n(a + l) / 2
        return 1L * (max - min + 1) * (min + max) / 2;
    }
}

매개변수로 주어지는 두 정수 a, b 중 어떤 수가 더 큰지 모르기 때문에 삼항연산자 또는 Math.min(), Math.max() 메소드를 활용해 대소관계를 정한다. 이후 위 사진에서 첫 번째 식을 적용하면 루프를 돌리는 대신 간단하게 답을 구할 수 있다.

리턴 타입이 long이고 공식 계산 과정에서 값의 범위가 int의 표현 범위를 벗어날 수 있으므로 1L을 곱하게 해서 long 타입으로 변환시킨다.

참고로 이 코드처럼 min, max를 따로 구하지 않아도 1L * (Math.abs(a - b) + 1) * (a + b)처럼 절대값을 사용해서 계산할 수 있다.

짝수의 합

class Solution {
    public int solution(int n) {
        return (n / 2) * (n / 2 + 1);
    }
}

공차 d가 있을 때의 등차수열의 합 공식을 활용하면 된다. 이 때 첫째항 aa는 2, 공차 dd는 2, 수열의 개수 nnn / 2인데, 계산의 용의성을 위해 n / 2 대신 kk라고 하자.. 이들을 해당 식에 대입해서 여차저차 정리하면...

S=k2×(2a+(k1)d)S = \frac{k}{2} \times (2a + (k-1)d)

여기서 ( a = 2 ), ( d = 2 ) 를 대입하면:

S=k2×(4+(k1)×2)S = \frac{k}{2} \times (4 + (k-1) \times 2)
S=k2×(4+2k2)S = \frac{k}{2} \times (4 + 2k - 2)
S=k2×2(k+1)S = \frac{k}{2} \times 2(k + 1)

따라서 짝수들의 합을 구하는 공식은 다음과 같다.

S=k(k+1)S = k(k + 1)

이 때 n / 2 대신 kk로 대체했었으므로 다시 대입하면 위와 같은 코드가 된다.

후기

프로그래밍 좀 배웠다고 오히려 생각이 좁아진 것인지 간단한 수학 공식을 응용하면 되는걸 컴퓨터를 고생시키고 있었다. 조심하자.

참고

profile
일단 해보자

0개의 댓글

관련 채용 정보