프로그래머스 - 두 정수 사이의 합 (Java)

왕효준·2023년 5월 26일
0

코딩 테스트

목록 보기
5/22

*모든 풀이 코드는 직접 작성하였습니다.

문제

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

문제 풀이

for 문으로도 할 수 있지만, 생각해보면 등차수열로 쉽게 풀 수 있다.
등차수열의 공식(평균값 * 항의 갯수)를 적용하면 된다.
다만, 정수 연산 시 나눗셈을 할 경우 소숫점이 버려지므로, 나눗셈 시점을 맨 마지막으로 해야 한다.

코드에서, 나눗셈 연산이 (a+b)가 아닌 맨 뒤로 와야 한다. 그 이유는 정수형 계산 시 소수점은 버려지므로, 만약 a+b가 홀수라면 정확한 값이 나오지 않는다.

만약 a+b가 3이고 Math.abs(b-a) + 1가 4라고 하자.
(a+b) / 2 를 먼저 한다면, 그 값은 1.5가 아닌 1이다. 그러므로 1 x 4 = 4가 나온다.

반면 나눗셈을 나중에 하면, 3 x 4 / 2 = 8이 된다. 나눗셈 연산 시점에 따라 값이 다르게 나오는 것이다. 이는 정수형 계산시 소수점을 버려버리기 때문이다.

풀이 코드

class Solution {
    public long solution(int a, int b) {
    	//(a+b)를 long 타입으로 변환해주면, 이후의 계산은 
        //long 타입으로 자동 타입 변환이 된다.
        return (long)(a+b) * (Math.abs(b-a) + 1) / 2;
        
    }
}
profile
자바 백엔드 개발자

0개의 댓글