본문 바로가기

BAEKJOON/수학

백준 2355번 [시그마](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 2355 (시그마)


문제 링크: https://www.acmicpc.net/problem/2355

문제 설명:

두 정수 AB가 주어질 때, 두 수 사이의 모든 정수의 합을 구하는 문제입니다. 단, 입력값이 **음수** 또는 **양수**일 수 있으므로 이를 고려해야 합니다.


문제 해결 코드


#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;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명:

  • 범위 스왑: - 두 값 AB 중에서 작은 값을 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