728x90
[BOJ 24267] 알고리즘 수업 - 알고리즘의 수행 시간 6 - [수학, 구현]
문제 링크
https://www.acmicpc.net/problem/24267
문제 요약
주어진 MenOfPassion 알고리즘(3중 for문)의 수행 횟수와 수행 시간을 다항식으로 나타냈을 때의 최고차항 차수를 출력하는 문제.
- 입력 크기 $n$ ($1 \le n \le 500,000$)
접근 방법
- 자료구조: 정수형 변수 (long long)
- 알고리즘: 수학 (조합론, Combination)
- 핵심 아이디어:
- 코드의 3중 반복문 조건($1 \le i < j < k \le n$)을 보면, $1$부터 $n$까지의 수 중에서 서로 다른 3개의 수를 뽑는 경우의 수와 동일함을 알 수 있습니다.
- 즉, 수행 횟수는 ${}_nC_3 = \frac{n(n-1)(n-2)}{6}$ 입니다.
- 다항식 $\frac{n(n-1)(n-2)}{6}$은 $n^3$ 항을 가지므로 최고차항의 차수는 3입니다.
풀이 코드
#include <iostream>
using namespace std;
int main() {
// 입출력 속도 향상
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long n;
cin >> n;
// 수행 횟수 계산: nC3
// n의 범위가 최대 500,000이므로 결과값은 약 2*10^16이 될 수 있음.
// 따라서 int(약 21억) 범위를 넘어가므로 long long 사용 필수.
long long count = n * (n - 1) * (n - 2) / 6;
cout << count << "\n";
cout << 3 << "\n"; // 알고리즘은 O(n^3)이므로 차수는 항상 3
return 0;
}
시간/공간 복잡도
- 시간 복잡도: O(1)
- 입력값 $n$에 대해 공식을 한 번 계산하여 출력하므로 상수 시간이 소요됩니다.
- 공간 복잡도: O(1)
- 별도의 배열이나 자료구조 없이 변수 하나만 사용합니다.
실행 결과
- 메모리: 2020 KB
- 시간: 0 ms
핵심 포인트
- 조합 공식 유도: 3중 for문의 i < j < k 조건이 ${}_nC_3$과 같다는 것을 파악해야 합니다.
- 자료형 선택: $n=500,000$일 때 결과값이 int 범위를 초과하므로 반드시 long long을 사용해야 오버플로우를 방지할 수 있습니다.
- 상수 출력: 문제 조건에서 차수는 변하지 않으므로 항상 3을 출력합니다.
예제 확인
- 예제 1:
- 입력: 7
- 계산: $\frac{7 \times 6 \times 5}{6} = 35$
- 출력:
- 35 3
728x90
'코딩테스트' 카테고리의 다른 글
| [BOJ 2745] 진법 변환 - [수학, 구현, 문자열] (0) | 2026.02.03 |
|---|---|
| [BOJ 24313] 알고리즘 수업 - 점근적 표기 1 - [수학 / 구현] (0) | 2026.02.03 |
| [BOJ 24266] 알고리즘 수업 - 알고리즘의 수행 시간 5 - [수학/구현] (0) | 2026.02.03 |
| [BOJ 24265] 알고리즘 수업 - 알고리즘의 수행 시간 4 - [수학, 구현] (0) | 2026.02.03 |
| [Programmers] 스마트한 프로도 - [그래프 이론, 그리디] (0) | 2026.01.27 |