프로그래머스 - 두 정수 사이의 합
(Java)*모든 풀이 코드는 직접 작성하였습니다.
문제
두 정수 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;
}
}
'Coding Test' 카테고리의 다른 글
Programmers - 서울에서 김서방 찾기 (Java) (Lv.1) (1) | 2023.12.19 |
---|---|
Programmers - 콜라츠 추측 (Java) (Lv.1) (1) | 2023.12.19 |
Programmers - 하샤드 수 (Java) (Lv.1) (0) | 2023.12.19 |
Programmers - 정수 내림차순으로 배치하기 (Java) (Lv.1) (0) | 2023.12.19 |
Programmers - 문자열을 정수로 바꾸기 (Java) (Lv.1) (0) | 2023.12.19 |