두 정수 사이의 합 문제 해결
문제 설명
두 정수 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의 대소관계는 정해져있지 않습니다.
입출력 예
a b return
3 5 12
3 3 3
5 3 12
해결 방법
1. 반복문을 이용한 직관적인 방법
class Solution {
public long solution(int a, int b) {
long answer = 0;
int start = Math.min(a, b);
int end = Math.max(a, b);
for (int i = start; i <= end; i++) {
answer += i;
}
return answer;
}
}
- 핵심 아이디어:
Math.min
과Math.max
를 이용하여 a와 b 중 작은 값을start
, 큰 값을end
에 저장합니다.start
부터end
까지 반복하며 각 숫자를answer
에 더합니다.
- 장점:
- 직관적이고 이해하기 쉽습니다.
- 다양한 언어에서 사용 가능한 기본적인 방법입니다.
2. 수학 공식을 이용한 효율적인 방법
class Solution {
public long solution(int a, int b) {
long n = Math.abs(b - a) + 1;
return n * (a + b) / 2;
}
}
- 핵심 아이디어:
- 등차수열의 합 공식 (n * (a + l) / 2)을 이용합니다.
- n은 항의 개수, a는 첫째항, l은 마지막 항을 의미합니다.
- 장점:
- 반복문을 사용하지 않아 연산 속도가 빠릅니다.
- 수학적인 지식을 활용하여 간결하게 표현할 수 있습니다.
시간 복잡도 비교
- 반복문: O(n) (n은 a와 b 사이의 수의 개수)
- 수학 공식: O(1) (상수 시간)
공간 복잡도 비교
- 반복문: O(1) (추가적인 메모리 사용량이 거의 없음)
- 수학 공식: O(1) (추가적인 메모리 사용량이 거의 없음)
결론
- 일반적인 경우: 두 방법 모두 문제를 해결할 수 있지만, 수학 공식을 이용한 방법이 더 효율적입니다.
- 큰 수를 다루는 경우: 수학 공식을 이용한 방법이 더욱 유리합니다.
- 코드 가독성: 반복문을 이용한 방법이 더 직관적일 수 있습니다.
최적의 방법 선택:
- 성능: 수학 공식을 이용한 방법을 추천합니다.
- 가독성: 반복문을 이용한 방법을 추천합니다.
- 문제의 제약 조건: 입력 범위나 메모리 제한 등에 따라 적절한 방법을 선택해야 합니다.
주의사항:
- 정수 범위: 문제에서 주어진 정수 범위를 고려하여 자료형을 선택해야 합니다.
- 오버플로: 계산 결과가 int형의 범위를 넘어설 수 있으므로 long형을 사용하는 것이 좋습니다.
참고:
- 수학 공식을 이용한 방법은 등차수열의 합 공식을 알고 있어야 적용할 수 있습니다.
- 두 방법 모두 a와 b의 대소관계를 고려하여 구현해야 합니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 음양 더하기 (1) | 2024.10.14 |
---|---|
[프로그래머스] 콜라츠 추측 (0) | 2024.10.14 |
[프로그래머스] 하샤드 수 (0) | 2024.10.14 |
[프로그래머스] 정수 제곱근 판별 (1) | 2024.10.14 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2024.10.14 |