PICNIC 문제 틀렸는데 정답처리가 .... 되었습니다. 코드가 ...

  • fkdlslss
    fkdlslss
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    bool studentArr[10];            // 1번 학생이 짝이 되면 1번은 1 2 번은 원래 0이고 
    bool areFriend[10][10];
    int stuNum;                     //학생수
    int matchNum;                   //짝의 수
    int answer = 0;                 //정답
    
    
    int countanswer() {
    
        int firstNum = -1;                              //가장 처음이 비어있다는것을 의미
        for (int i = 0;i < stuNum;i++) {        
            if (studentArr[i] == 0) {                   //학생수 만큼의 배열이 비어있으면 그 숫자가 비어있는 첫번쨰 순서가됨
                firstNum = i;                           //즉 시작 기준이 된다는말 (재귀의 기준)
                break;
            }
        }
    
        if (firstNum == -1) { return 1; }               //만약 firstNum 이 비어있다면  = 모든 숫자가 다 차있다면 종료
    
        int ret = 0;                                    //정답
        for (int j = firstNum+1;j < stuNum;j++) {
            if (areFriend[firstNum][j] && !studentArr[j]) {
                studentArr[j] = true;
                studentArr[firstNum] = true;
                ret +=  countanswer();
                studentArr[j] = false;
                studentArr[firstNum] = false;
            }
        }
        return ret;
    
    }
    
    
    int main() {
        int caseNum;
        cin >> caseNum;
        while (caseNum--) {
    
    
            cin >> stuNum >> matchNum;
    
            memset(studentArr, 0, sizeof(bool) * 10);                   //배열들을 전부 초기화 
            memset(areFriend, 0, sizeof(bool) * 10 * 10);
    
            int friend1, friend2;
            for (int i = 0;i < matchNum;i++) {                          //친구 1 2 에 따라 전부 참으로 바꾸어줌 
                cin >> friend1 >> friend2;
                areFriend[friend1][friend2] = true;
                areFriend[friend2][friend2] = true;
            }
    
    
            cout << countanswer() << endl;
    
        }
    
        return 0;
    }
    

    학생수만큼의 1차원 배열과 짝이되는 2차원 배열 두개를 구성하여 구현하였습니다.

    예제가 4 6 인경우 원래 3이 나와야 하는데 2가 나오는 오류가 있습니다.
    근데 정답처리가 되었다는...
    다른 것들은 다 되는데 예제만 안되서 ...... ㅠㅠ

    코드 한번 봐주시면 정말 감사하겠습니다. 그리고 이거 채점 기준을 다시 수정하셔야 될듯합니다. 감사합니다.


    8년 전
2개의 댓글이 있습니다.
  • seico75
    seico75

    areFriend[friend2][friend2] = true; 이 부분을
    areFriend[friend2][friend1] = true; 로 바꾸면 되지 않을까요?

    그런데 아래 부분은 0 대신에 false 를 쓰는 것이 더 안전하지 않을까요?
    if (studentArr[i] == 0) {


    8년 전 link
  • fkdlslss
    fkdlslss

    오 되네요 ! 답변 정말 감사합니다. !!


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.