강의

멘토링

커뮤니티

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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

41. 연속된 자연수의 합(단순 수리)

이 방법은 시간복잡도가 On2 정도일까요?

작성

·

394

0

int main()
{
	freopen("input.txt", "rt", stdin);

	int n;

	scanf("%d", &n);

	std::vector<int> list;
	int sum = 0;
	int count = 0;
	for (int i = (n/2) + 1; i > 0; i--)
	{
		int temp = i;
		sum = 0;
		list.clear();
		while (true)
		{
			sum += temp;
			list.push_back(temp);
			temp--;

			if (sum == n)
			{
				for (int k = list.size() - 1; k > 0; k--)
				{
					printf("%d + ", list[k]);
				}
				printf("%d = %d\n", list[0], sum);
				count++;
				break;
			}
			else if (sum > n)
			{
				break;
			}
		}
	}

	printf("%d", count);

	return 0;
}

 

반복문이 3번 등장해서 좋지 못하다고 생각듭니다.

시간복잡도가 On2 이상 일까요?

답변 1

1

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

안녕하세요^^

네. 좀 개선을 해야 할 것 같습니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기