작성
·
300
0
안녕하세요. 큰돌 선생님!!
강의 잘듣고 있는 학생입니다! 다름이 아니라, 선생님께서 알려주신 내용들을 바탕으로 저의 식대로 한번 짜보았는데요.
아래 코드를 백준에서 돌리면 결과는 잘 나오는데 틀렸다고 나오더라구요. 어디서 틀린건지 도저히 모르겠어서 질문드립니다. 코드는 선생님이 알려주신 내용 바탕으로 짠거라서 바로 아실꺼라고 생각합니다!!
답변 부탁드리겠습니다. 감사합니다.
/*
문제
왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
입력
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
출력
일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.
*/
#include<bits/stdc++.h>
using namespace std;
vector<int> height;
int sum_height = 0;
const int total_height = 100; //난쟁이수, 일곱난쟁이키의 합
void printV(vector<int> &v)
{
vector<int> ::iterator iter;
for(iter = v.begin(); iter != v.end(); iter++)
{
cout << *iter << "\n";
}
}
int main()
{
for(int i = 0; i < 9; i++) //난쟁이수는 9명
{
int k;
cin >> k;
sum_height += k;
height.push_back(k);
}
//cout << sum_height << endl;
sort(height.begin(), height.end(), less<int>());
//printV(height);
for(int i = 0; i < 9; i++) //난쟁이수는 9명
{
for (int j = 0; j < i; j++)
{
if(height[i]+ height[j] == sum_height - total_height)
{
// cout << i << " "<< j<< " " << sum_height - total_height << endl;
// cout << height[i] << " " << height[j] << endl;
height.erase(height.begin() + i);
height.erase(height.begin() + j);
break;
}
}
}
printV(height);
return 0;
}
답변 1
0
안녕하세요 ㅎㅎ
이코드요. break문은 가장 가까운 반복문을 빠져나가는 키워드입니다.
즉, for문 두개를 빠져나가게끔 로직을 짜야겠죠?
height.erase(height.begin() + j);
break;
flag를 이용해서 저 상황이라면 flag = 0 >> 1로 만들고
height.erase(height.begin() + j);
break;
}
if(flag)break;
이런식으로 하시면 될거에요.
그리고 담부터는...
0주차 질문하는 법 참고해서 질문 부탁드려요.ㅎㅎ
감사합니다.
감사합니다. 선생님!! 다음부터는 참고해서 질문드리겠습니다!!