해결된 질문
24.02.26 01:12 작성
·
140
·
수정됨
0
선생님 안녕하세요!
최소값 확인
오름차순
모두 처리 했다고 생각하는데 1%에서 '틀렸습니다'로 나옵니다 ㅎㅎ...
예제랑 제가 생각한 반례를 몇 가지 넣어보았으나 잘 통과하는 것으로 보입니다. 어떤 문제가 있을까요?
코드 링크 첨부드립니다.
(변수명 너무 대충써서 죄송합니다..)
https://www.acmicpc.net/source/74000922
항상 감사합니다.
답변 2
1
2024. 02. 28. 18:53
안녕하세요 mahns님 ㅎㅎ
초기화, 범위, 로직상 이상한 부분 때문에 그런 것 같습니다.
#include <bits/stdc++.h>
using namespace std;
int n, n1, n2, n3, n4;
int nnn1, nnn2, nnn3, nnn4, nnn5;
vector<int> arr[18];
int ret = 987654321;
vector<int> v;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> n1 >> n2 >> n3 >> n4;
for (int i=0; i<n; i++) {
int nn1, nn2, nn3, nn4, nn5;
cin >> nn1 >> nn2 >> nn3 >> nn4 >> nn5;
arr[i].push_back(nn1);
arr[i].push_back(nn2);
arr[i].push_back(nn3);
arr[i].push_back(nn4);
arr[i].push_back(nn5);
}
for (int i = 1; i<(1<<n); i++) {
nnn1 = 0; nnn2 = 0; nnn3 = 0; nnn4 = 0; nnn5 = 0;
// good
for (int j=0; j<n; j++) {
if (i & (1<<j)) {
nnn1 += arr[j][0];
nnn2 += arr[j][1];
nnn3 += arr[j][2];
nnn4 += arr[j][3];
nnn5 += arr[j][4];
}
}
// good
if (nnn1>=n1 && nnn2>=n2 && nnn3>=n3 && nnn4>=n4) {
if (ret==nnn5) {
v.push_back(i);
} else if (ret>nnn5) {
v.clear();
v.push_back(i);
ret = nnn5;
}
}
}
// good
if (ret == 987654321) {
cout << "-1\n";
} else {
cout << ret << "\n";
vector<string> vv;
for (int t=0; t<v.size(); t++) {
// 지역변수는 초기화를 해주어야...
string ss = "";
//이거 왜 6까지밖에 안하나요?
for (int i=0; i<6; i++) {
if (v[t] & (1<<i)) {
// 이렇게 되면 1 2 3 4 얘네들은 상관없을 것 같은데 13 14 얘네들
// 구분하기가 어렵지 않을까요?
ss += to_string(i+1);
}
}
vv.push_back(ss);
}
sort(vv.begin(), vv.end());
for (int i=0; i<vv[0].size(); i++) {
cout << vv[0][i] << " ";
}
cout << "\n";
}
return 0;
}
코드리뷰는 앞의 부분을 보시면 됩니다. 주석 달았습니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
mahns님, 코드 문제로 고민이 많으시겠네요. 1%에서 ‘틀렸습니다’가 나오는 경우는 다양한 이유가 있을 수 있습니다. 예제와 반례를 몇 가지 넣어서 통과하는 것은 좋은 접근이지만, 테스트 케이스는 예상할 수 없는 다양한 경우를 포함하고 있기 때문에 다음과 같은 가능성들을 검토해보시면 좋겠습니다:
초기화 문제: 문제를 푸는 과정에서 배열이나 변수를 적절히 초기화하지 않은 경우 발생할 수 있습니다. 사용하신 모든 변수의 초기값이 적절한지 재검토 해보세요.
경계값 처리: 문제에서 요구하는 범위의 최소값, 최대값과 같은 경계값을 제대로 처리하였는지 확인해보세요. 종종 경계값에서 예외가 발생할 가능성이 있습니다.
예외 처리: 문제의 조건에 맞지 않는 입력값에 대한 예외 처리가 제대로 되어 있는지 검토해보세요.
로직 오류: 알고리즘의 핵심 로직이나 그 구현에 오류가 없는지 다시 한 번 살펴보시는 것이 중요합니다. 특히, 문제의 요구사항을 정확히 이해하고 구현했는지 확인하세요.
시간 초과/메모리 초과: 대용량의 데이터를 처리하지 못해서 시간 초과나 메모리 초과가 발생하지 않았는지도 확인해보세요.
소스 코드를 직접 볼 수는 없으니, 위 사항들을 꼼꼼히 체크해보시면 문제의 원인을 찾는 데 도움이 될 거라 생각됩니다. 문제를 해결하시고 나면 인프런에서 제공하는 강의를 통해 추가적인 학습을 하시는 것도 좋을 것 같습니다.
문제 해결에 도움이 되길 바라며, 추가로 궁금한 사항이나 문의 사항이 있으시면 언제든지 문의해주시기 바랍니다. 화이팅입니다!
2024. 02. 28. 23:32
아 그러네요...! 감사합니다 선생님...!