NQUEEN 오답처리 질문드립니다.

  • sonyy789
    sonyy789

    입력 N이 1~12 여서, 테스트 결과 모두 답과 일치합니다.
    시간초과를 걱정하고 있었는데, 계속 '오답' 처리가 되서
    질문드립니다.
    코드는 다음입니다.

    #include <iostream>
    using namespace std;
    int mem[13][13] = {0};
    int zero_chk(int x, int y, int N)
    {
        int tmp_x = x-1, tmp_y = y-1;
        while(tmp_x >= 0 && tmp_y >=0) if(mem[tmp_y--][tmp_x--] == 1) return 1;
        tmp_x = x+1; tmp_y = y-1;
        while(tmp_x < N && tmp_y >=0) if(mem[tmp_y--][tmp_x++] == 1) return 1;
        while(y >= 0) if(mem[--y][x] == 1) return 1; 
        return 0;
    }
    int nqueen(int y, int N)
    {
        if(y == N) return 1;
        int cnt  = 0;
        for(int i = 0; i < N; i++)
        {
            //zero_check()
            if(zero_chk(i, y, N)) continue;
            mem[y][i] = 1;
            cnt += nqueen(y+1, N);
            mem[y][i] = 0;
        }
        return cnt;
    }
    int main()
    {
        int T, N;
        cin>>T;
        while(T--)
        {
            cin>>N;
            cout<<nqueen(0, N)<<"\n";
        }
    }
    

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

    while(y >= 0) if(mem[--y][x] == 1) return 1;
    에서 y가 0이면 mem[-1][x]를 참조하게 됩니다.


    8년 전 link
  • sonyy789
    sonyy789

    잘못된 참조도 '오답'으로 처리되는군요.
    답변감사드립니다 ~


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