BOARDCOVER 질문있습니다.

  • tyjk32
    tyjk32

    BOARDCOVER 문제에서 저 같은 경우는 └ 를 case_one, ┌ 를 case_two, ┘ 를 case_three, ┐ 를 case_four 함수로 만들어서 재귀를 돌렸습니다. 모든 케이스 정상통과하였고, 나름대로 몇가지 케이스를 만들어서 테스트를 했을때에도 정상적으로 나왔는데, 오답 처리가 되네요..
    제 생각으로는 반복문에서 범위가 틀린 부분이 있지 않을까 생각되는데, 어느부분에 문제가 있는걸까요??
    테스트를 해봐야할 케이스가 있다면 알려주세요 ㅠㅠ

    #include <stdio.h>
    
    #define MAX 20
    
    char input[MAX][MAX + 1];
    int cnt;
    int dot_cnt, shop_cnt;
    
    void case_one(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c);
    void case_two(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c);
    void case_three(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c);
    void case_four(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c);
    
    int main(void)
    {
        int c, i, j, k;
        int h, w;
    
        scanf("%d", &c);
    
        for(i = 0; i < c; i++)
        {
            scanf("%d %d", &h, &w);
    
            dot_cnt = 0;
            shop_cnt = 0;
            cnt = 0;
    
            for(j = 0; j < h; j++)
            {
                scanf("%s", &input[j]);
    
                for(k = 0; k < MAX + 1; k++)
                {
                    if(input[j][k] == '.')
                    {
                        dot_cnt++;
                    }
                    else if(input[j][k] == '#')
                    {
                        shop_cnt++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
    
            if((dot_cnt % 3) == 0)
            {
                case_one(0, 0, h, w, dot_cnt, shop_cnt);
                case_two(0, 0, h, w, dot_cnt, shop_cnt);
                case_three(0, 0, h, w, dot_cnt, shop_cnt);
                case_four(0, 0, h, w, dot_cnt, shop_cnt);
    
                printf("%d\n", cnt);
            }
            else
            {
                printf("0\n");
            }
        }
    
        return 0;
    }
    
    void case_one(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c)
    {
        if(start_w == end_w)
        {
            start_h++;
            start_w = 0;
        }
    
        if(start_h == end_h)
        {
            return;
        }
    
        if(input[start_h][start_w] == '#')
        {
            case_one(start_h, start_w + 1, end_h, end_w, d_c, s_c);
        }
        else
        {
            if(input[start_h + 1][start_w] == '.' && input[start_h + 1][start_w + 1] == '.')
            {
                input[start_h][start_w] = '#';
                input[start_h + 1][start_w] = '#';
                input[start_h + 1][start_w + 1] = '#';
    
                if(d_c - 3 == 0)
                {
                    input[start_h][start_w] = '.';
                    input[start_h + 1][start_w] = '.';
                    input[start_h + 1][start_w + 1] = '.';
    
                    cnt++;
    
                    return;
                }
    
                case_one(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_two(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_three(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_four(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
    
                input[start_h][start_w] = '.';
                input[start_h + 1][start_w] = '.';
                input[start_h + 1][start_w + 1] = '.';
            }
        }
    
        return;
    }
    
    void case_two(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c)
    {
        if(start_w == end_w)
        {
            start_h++;
            start_w = 0;
        }
    
        if(start_h == end_h)
        {
            return;
        }
    
        if(input[start_h][start_w] == '#')
        {
            case_two(start_h, start_w + 1, end_h, end_w, d_c, s_c);
        }
        else
        {
            if(input[start_h][start_w + 1] == '.' && input[start_h + 1][start_w] == '.')
            {
                input[start_h][start_w] = '#';
                input[start_h][start_w + 1] = '#';
                input[start_h + 1][start_w] = '#';
    
                if(d_c - 3 == 0)
                {
                    input[start_h][start_w] = '.';
                    input[start_h][start_w + 1] = '.';
                    input[start_h + 1][start_w] = '.';
    
                    cnt++;
    
                    return;
                }
    
                case_one(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_two(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_three(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_four(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
    
                input[start_h][start_w] = '.';
                input[start_h][start_w + 1] = '.';
                input[start_h + 1][start_w] = '.';
            }
    
        }
    
        return;
    }
    
    void case_three(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c)
    {
        if(start_w == end_w)
        {
            start_h++;
            start_w = 0;
        }
    
        if(start_h == end_h)
        {
            return;
        }
    
        if(input[start_h][start_w] == '#')
        {
            case_three(start_h, start_w + 1, end_h, end_w, d_c, s_c);
        }
        else
        {
            if(input[start_h + 1][start_w] == '.' && input[start_h + 1][start_w - 1] == '.')
            {
                input[start_h][start_w] = '#';
                input[start_h + 1][start_w] = '#';
                input[start_h + 1][start_w - 1] = '#';
    
                if(d_c - 3 == 0)
                {
                    input[start_h][start_w] = '.';
                    input[start_h + 1][start_w] = '.';
                    input[start_h + 1][start_w - 1] = '.';
    
                    cnt++;
    
                    return;
                }
    
                case_one(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_two(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_three(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_four(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
    
                input[start_h][start_w] = '.';
                input[start_h + 1][start_w] = '.';
                input[start_h + 1][start_w - 1] = '.';
            }
        }
    
        return;
    }
    
    void case_four(int start_h, int start_w, int end_h, int end_w, int d_c, int s_c)
    {
        if(start_w == end_w)
        {
            start_h++;
            start_w = 0;
        }
    
        if(start_h == end_h)
        {
            return;
        }
    
        if(input[start_h][start_w] == '#')
        {
            case_four(start_h, start_w + 1, end_h, end_w, d_c, s_c);
        }
        else
        {
            if(input[start_h][start_w + 1] == '.' && input[start_h + 1][start_w + 1] == '.')
            {
                input[start_h][start_w] = '#';
                input[start_h][start_w + 1] = '#';
                input[start_h + 1][start_w + 1] = '#';
    
                if(d_c - 3 == 0)
                {
                    input[start_h][start_w] = '.';
                    input[start_h][start_w + 1] = '.';
                    input[start_h + 1][start_w + 1] = '.';
    
                    cnt++;
    
                    return;
                }
    
                case_one(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_two(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_three(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
                case_four(start_h, start_w + 1, end_h, end_w, d_c - 3, s_c + 3);
    
                input[start_h][start_w] = '.';
                input[start_h][start_w + 1] = '.';
                input[start_h + 1][start_w + 1] = '.';
            }
        }
    
        return;
    }
    

    10년 전
5개의 댓글이 있습니다.
  • rlatkddn212
    rlatkddn212

    4 3
    ...
    ...
    ...
    ...

    일때랑

    3 4
    ....
    ....
    ....

    일때랑 답이 다른데요?


    10년 전 link
  • tyjk32
    tyjk32

    헉..
    3
    3 4
    ....
    ....
    ....
    4 3
    ...
    ...
    ...
    ...

    여기까진 4로 똑같은데 이상태에서

    3 4
    ....
    ....
    ....

    하니까 8이나오네요.. 감사합니다 고쳐볼게요 :-)


    10년 전 link
  • tyjk32
    tyjk32

    초기화가 문제였네요.. 덕분에 해결했습니다^^
    좋은하루되세요!!


    10년 전 link
  • rlatkddn212
    rlatkddn212

    좋은 하루 되세요ㅎㅎㅎ


    10년 전 link
  • jsrimr
    jsrimr

    죄송한데 초기화 어떤 부분이 문제였는 지 알려주실 수 있나요? ㅠㅠ


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