728x90
SMALL
백준 문제 풀이: 2355 (시그마)
문제 링크: https://www.acmicpc.net/problem/2355
문제 설명:
두 정수 A
와 B
가 주어질 때, 두 수 사이의 모든 정수의 합을 구하는 문제입니다. 단, 입력값이 **음수** 또는 **양수**일 수 있으므로 이를 고려해야 합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
long long int a, b;
cin >> a >> b;
// a가 b보다 클 경우 스왑
if (a > b) {
long long int temp = a;
a = b;
b = temp;
}
// 등차수열의 합 공식: n * (첫항 + 끝항) / 2
long long int result = (b - a + 1) * (a + b) / 2;
cout << result << '\n';
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 범위 스왑: - 두 값
A
와B
중에서 작은 값을a
, 큰 값을b
로 설정합니다. - 이는 루프를 필요 없이 줄이기 위해 필요한 정렬 과정입니다. - 등차수열의 합 공식 사용: - 두 수
a
부터b
까지의 합은 등차수열의 합 공식으로 구할 수 있습니다: \( S = n \cdot (첫항 + 끝항) / 2 \) 여기서 \( n = (b - a + 1) \)입니다.
시간 복잡도 분석
- 등차수열의 합 공식을 한 번만 계산하므로 시간 복잡도는 **O(1)**입니다.
- 두 값이 양수, 음수 또는 혼합된 경우에도 상수 시간 내에 결과를 구할 수 있습니다.
결과
두 수 사이의 모든 정수의 합을 출력합니다.
- 입력 예시:
1 10
- 출력 예시:
55
- 입력 예시:
-10 10
- 출력 예시:
0
- 입력 예시:
5 5
- 출력 예시:
5
추가 설명:
- 등차수열의 합 공식을 활용하여 반복문 없이 효율적으로 결과를 구할 수 있습니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 2702번 [초6 수학](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
---|---|
백준 1834번 [나머지와 몫이 같은 수](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
백준 14921번 [용액 합성하기](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
백준 18869번 [멀티버스 Ⅱ](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
백준 13458번 [시험 감독](C++) -yes6686- 티스토리 (0) | 2024.02.15 |