← 회차 전체 문제정처LAB 자체 제작내용 검수 완료정처LAB 정보처리기사 필기 자체 제작 3회 · 프로그래밍 언어 활용 · 반복 복잡도 · 80번
안쪽 변수가 매번 절반으로 줄어드는 다음 중첩 반복문의 시간복잡도는?
for (int i = 1; i <= n; i++) {
for (int j = i; j > 0; j /= 2) {
work();
}
}
- 1
O(log n)
오답 이유O(log n)은 바깥 반복을 빠뜨리고 가장 큰 i에서의 안쪽 반복 횟수만 센 결과다. - 2
O(n)
오답 이유O(n)은 안쪽 반복을 상수 시간으로 본 결과지만 각 i마다 약 log₂i번 실행된다. - 3
O(n log n)
정답 근거전체 실행 횟수는 `Σ floor(log₂i)+1`이고 이는 Θ(n log n)이므로 O(n log n)이 정답이다. - 4
O(n²)
오답 이유O(n²)은 j가 1씩 감소한다고 가정한 값이다. 실제로는 매번 절반이 되어 안쪽 반복이 로그 횟수다.
정답·상세해설정답 3번
i번째 바깥 반복에서 안쪽 반복은 j를 절반씩 줄이므로 O(log i)번 수행된다. 이를 i=1부터 n까지 합하면 O(log 1+...+log n)=O(n log n)이다.
콘텐츠 기록콘텐츠 정보
- 자료 유형
- 정처LAB 자체 제작
- 검수 상태
- 내용 검수 완료
- 최종 검수
- 2026-08-16