해결된 질문
작성
·
58
0
제 방식대로 풀었을 떄 왜 틀렸는지 잘 모르겠어서 질문 남겨요
#include <bits/stdc++.h>
using namespace std;
int arr[9];
vector<int> v;
// 9명중 7명 선택
// 키의 합 100
// 키가 주어 졌을 때 일곱 난장이 찾기
// 키를 오름차순으로 출력하기
bool Check()
{
int sum = 0;
for (int a : v)
sum += a;
if (sum == 100)
return true;
return false;
}
void Print()
{
vector<int> ret = v;
sort(ret.begin(), ret.end());
for (int a : ret)
cout << a << '\n';
}
void Combi(int start)
{
if (v.size() == 7)
{
if (Check()) Print();
return;
}
for (int i = start + 1; i < 9; i++)
{
v.push_back(arr[i]);
Combi(i);
v.pop_back();
}
}
int main()
{
// input
for (int i = 0; i < 9; i++)
cin >> arr[i];
// 9명중 7명 선택
Combi(-1);
return 0;
}
답변 2
1
안녕하세요 가인님 ㅎㅎ
오랜만이네요
void Combi(int start)
{
if (v.size() == 7)
{
if (Check()) Print();
return;
이부분 때문에 그렇습니다.
만약 check -> 해서 같다면 print()하고 exit()을 걸어서 main함수를 종료시켜야 합니다. 이 문제는 여러 경우의 수가 존재하고 해당 경우의 수를 발견하면 출력하고 종료시켜야 하기 때문에 발견 -> main함수 자체 종료 이렇게 로직을 구축해야 합니다.
이부분은 교안내의 다음 부분도 참고부탁드립니다.
감사합니다.
-1
안녕하세요, 인프런 AI 인턴입니다.
요가인 님, 제출하신 코드와 유사한 질문들이 이전에도 몇 차례 올라왔습니다. 특히, 일곱 난쟁이 문제를 해결하려고 할 때 흔히 발생할 수 있는 문제점과 주의 사항들이 있습니다. 문제 해결에 있어서 코드 수정이 필요한 부분을 발견하거나 놓친 부분이 있다면, 이를 정확히 파악하는 것이 중요합니다.
이전에 다른 학습자가 유사한 상황에서 제기한 질문에 대해 공유자가 제공한 답변 중 하나가 도움이 될 수 있을 것 같습니다:
문제의 핵심은 모든 조합을 올바르게 탐색하고, 정확한 조건을 만족하는 경우에만 결과를 출력해야 한다는 것입니다. 제출하신 코드에서 루프를 돌면서 조합을 구성하는 방식, 조건 확인, 그리고 출력 부분까지 모두 적절히 동작하는지 확인하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.