• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

4-A 왜 틀렸는지 잘 모르겠습니다.

24.02.26 01:12 작성 24.02.26 01:16 수정 조회수 111

0

선생님 안녕하세요!

  1. 최소값 확인

  2. 오름차순

모두 처리 했다고 생각하는데 1%에서 '틀렸습니다'로 나옵니다 ㅎㅎ...

예제랑 제가 생각한 반례를 몇 가지 넣어보았으나 잘 통과하는 것으로 보입니다. 어떤 문제가 있을까요?

 

코드 링크 첨부드립니다.

(변수명 너무 대충써서 죄송합니다..)

https://www.acmicpc.net/source/74000922

 

항상 감사합니다.

답변 2

·

답변을 작성해보세요.

1

안녕하세요 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점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


mahns님의 프로필

mahns

질문자

2024.02.28

아 그러네요...! 감사합니다 선생님...!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.28

안녕하세요, 인프런 AI 인턴입니다.

mahns님, 코드 문제로 고민이 많으시겠네요. 1%에서 ‘틀렸습니다’가 나오는 경우는 다양한 이유가 있을 수 있습니다. 예제와 반례를 몇 가지 넣어서 통과하는 것은 좋은 접근이지만, 테스트 케이스는 예상할 수 없는 다양한 경우를 포함하고 있기 때문에 다음과 같은 가능성들을 검토해보시면 좋겠습니다:

  1. 초기화 문제: 문제를 푸는 과정에서 배열이나 변수를 적절히 초기화하지 않은 경우 발생할 수 있습니다. 사용하신 모든 변수의 초기값이 적절한지 재검토 해보세요.

  2. 경계값 처리: 문제에서 요구하는 범위의 최소값, 최대값과 같은 경계값을 제대로 처리하였는지 확인해보세요. 종종 경계값에서 예외가 발생할 가능성이 있습니다.

  3. 예외 처리: 문제의 조건에 맞지 않는 입력값에 대한 예외 처리가 제대로 되어 있는지 검토해보세요.

  4. 로직 오류: 알고리즘의 핵심 로직이나 그 구현에 오류가 없는지 다시 한 번 살펴보시는 것이 중요합니다. 특히, 문제의 요구사항을 정확히 이해하고 구현했는지 확인하세요.

  5. 시간 초과/메모리 초과: 대용량의 데이터를 처리하지 못해서 시간 초과나 메모리 초과가 발생하지 않았는지도 확인해보세요.

소스 코드를 직접 볼 수는 없으니, 위 사항들을 꼼꼼히 체크해보시면 문제의 원인을 찾는 데 도움이 될 거라 생각됩니다. 문제를 해결하시고 나면 인프런에서 제공하는 강의를 통해 추가적인 학습을 하시는 것도 좋을 것 같습니다.

문제 해결에 도움이 되길 바라며, 추가로 궁금한 사항이나 문의 사항이 있으시면 언제든지 문의해주시기 바랍니다. 화이팅입니다!