• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

41번 질문있습니다!

21.11.17 14:43 작성 조회수 167

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;
}
근데 아무리 봐도 효율이 좋은것같지는 않네요.. 교수님 코드처럼 생각해내는게 중요한데 아직 거기까진 못간것같습니다..
 
면접때 이런 질문이 나왔다고 하셨는데 제가쓴 방식대로 해도 괜찮은건가요? 처음 딱 봤을때 교수님 풀이를 생각해낼것 같지는 않아서 질문드립니다..
 
이렇게 짜도 결과는 같게 나오는것 같습니다!
 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

이 방법도 굉장히 좋은 방법입니다. 실제 면접에서 이 방법을 이야기 했다고 해도 아주 좋은 인상을 줬을 것 같습니다. 좋은 주말 되세요^^