인프런 커뮤니티 질문&답변
41번 질문있습니다!
작성
·
278
0
강사님 강의 잘 듣고있습니다.
다름이 아니라 제가 생각해낸것은 1부터 n 까지의 합 공식을 이용해서 연속된 숫자들의 합을 계산해둔 것인데,
예를들어 4+5+6이면 
1부터 6까지의 합공식 -> 6*7/2 = 21 에서 
1부터 3까지의 합공식 -> 3*4 /2 = 6을 빼면 되는것 같아서 
밑에처럼 짜봤습니다.
#include<iostream>
using namespace std;
int main() {
	int n; cin >> n;
	int ans = 0;
	int k;
	for (int i = n-1; i >=1; i--) {// i를 역순으로 하면 개수가 작은놈부터 출력 i를 정순으로 하면 개수가 많은놈부터 출력
		for (int j = 1; j < n - 1; j++) {
			if (i*(i + 1) - j * (j - 1) == 2 * n) {
				for (k = j; k < i; k++) {
					cout << k << "+";
				}
				cout << i << " = " << n << endl;
			}
		}
	}
	
	return 0;
}
근데 아무리 봐도 효율이 좋은것같지는 않네요.. 교수님 코드처럼 생각해내는게 중요한데 아직 거기까진 못간것같습니다.. 
면접때 이런 질문이 나왔다고 하셨는데 제가쓴 방식대로 해도 괜찮은건가요? 처음 딱 봤을때 교수님 풀이를 생각해낼것 같지는 않아서 질문드립니다..
이렇게 짜도 결과는 같게 나오는것 같습니다! 





