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

dkswhdgur1209님의 프로필 이미지

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-A

1-A문제 순열재귀함수 질문입니다.

23.03.02 14:47 작성

·

254

0

안녕하세요 강사님!

일곱난쟁이문제를 순열로 풀 때 순열의 방법으로 do-while permutation와 재귀함수가 있습니다.

이 중, 일곱난쟁이문제를 순열의 재귀함수를 통해서 푸는 방법으로

풀고 싶어서 풀다가 어느 코드의 구현이 잘못 된지를 몰라서 질문 드립니다.

http://boj.kr/ad5d9ed01b4c433cadf0e458aad20a09

 

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

2023. 03. 05. 03:49

안녕하세요 1209님 ㅎㅎ

이 문제는

7개를 합해 100이 될 때 출력! 하고 끝내는 문제죠?

그리고..

가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

>> 를 고려해주셔야 해요. 여러개 일 때 그냥한번 출력하고 끝!! 하는 문제입니다.

 

자 그러면

void printV(vector<int> &v){
	int sum = 0;
	for(int i = 0; i < 7; i++){
		sum += v[i];
		if(sum == 100) break;
	}
	for(int i = 0; i < v.size() - 2; i++){
		cout << v[i] << '\n';
	}
	cout << '\n';
}

이 코드가 수정되어야 할 것같지 않을까요?

일단은 sum == 100 break;를 하면 안되겠죠? 그러면 5개를 더하고 100일 때 경우가 잘못체킹이 되죠?

그리고 이 함수로써 main함수를 끝내야 해요. 이 때는 exit(0)을 써야 합니다. (교안 참고)

그리고 swap된 v를 기반으로 하는게 아니라 새로운 배열을 만들어 sort를 해서 오름차순으로 출력까지 해야겠죠?

void printV(vector<int> &v){  
	int sum = 0;
    vector<int> temp;
	for(int i = 0; i < 7; i++){
		sum += v[i]; 
        temp.push_back(v[i]);
	}
    if(sum == 100){  
        sort(temp.begin(), temp.end());
        for(int a : temp) cout << a << " "; 
        exit(0);
    } 
}

이렇게 고치시면 됩니다.

나머지 코드는 너무나도 잘 짜셨습니다. ㅎㅎ

 

감사합니다.