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);
}
}
이렇게 고치시면 됩니다.
나머지 코드는 너무나도 잘 짜셨습니다. ㅎㅎ
감사합니다.