강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

베레벨님의 프로필 이미지
베레벨

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

9. 모두의 약수(제한시간 1초)

시간 복잡도 관련으로 질문 드립니다

해결된 질문

작성

·

226

0

안녕하세요 강사님, 강의 잘 듣고 있습니다!

다름이 아니라 제가 짠 코드로도 100점이 나오긴 하는데, 강사님이 설명해주신 코드와는 방식이 조금 달라 해당 코드의 시간 복잡도에 대해 여쭤보고자 질문 드립니다.

 

#include <iostream>
using namespace std;

int main()
{
	int count = 0;
	int max = 0;
	int input;

	cin >> input;

	for (int i = 1; i <= input; i++)
	{
		count = 0;
		max = i;
		for (int j = 1; j <= max; j++)
		{
			if (i % j == 0)
			{
				if ((i / j) != j)
					count++;

				max = (i / j) - 1;
				count++;
			}
		}
		cout << count << ' ';
	}
	cout << endl;
}

 

시간 복잡도 O(n^2)의 코드와 유사한데, for문을 한 번 계산할 때마다 max 값을 줄여 약수의 절반을 찾아내면 다음 for문으로 넘어가는 방식의 코드예요.

실제로 for문이 도는 건 원래의 값보다 훨씬 적긴 한데 O(logn * n)보다는 오래 걸리는 것처럼 보여서... 이 코드의 시간 복잡도도 O(n^2)이 맞나요?

 

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

O(N^2)으로 볼 것 같습니다.

베레벨님의 프로필 이미지
베레벨

작성한 질문수

질문하기