알고리즘 문제풀기/인프런 강의 정답

41. 연속된 자연수의 합(단순 수리) [정렬 & 이분탐색(결정알고리즘) & 투포인트 알고리즘 & 스택]

코다람쥐 2022. 4. 12. 23:04

나의정답.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);
	
	int input, n, sum, i, j, cnt, count = 0;
	scanf("%d", &input);
	
	vector<int> arr(100);
	
	n = (input / 2) + 1;
	
	for(i = n; i >= 0; i--){
		sum = 0;
		cnt = 0;
		for(j = i; j > 0; j--) {
			sum += j;
			arr[cnt++] = j;
			
			if( sum >= input)
				break;
		}
		
		if(sum == input){
			for(j = cnt; j > 0; j--){
				printf("%d ", arr[j - 1]);
				
				if(j > 1)
					printf("+ ");
				
			}
			printf("= %d\n", input);
			count++;
		}
	}
	
	printf("%d", count);
}