pi문제 며칠째 매달리고 있습니다ㅠㅠ 도와주세요

  • scar1012
    scar1012

    pi문제에 나와있는 테스트케이스도 문제없이 다 통과하는데 제출만 하면 오답이 나옵니다 ㅠㅠ
    도대체 뭐가 잘못된걸까요ㅠㅠ

    int level(char arr[], int start, int mass) {

    if (start)start += 1;
    int end = start + mass - 1;
    
    int d = arr[start + 1] - arr[start];
    int check = 0;
    
    for (int i = 2; i <= mass; i++) {
        //등차수열인지 확인
        if (arr[start + i] - arr[start + i - 1] != d)
            break;
        else check++;
    }
    
    //d가 일정한 등차수열인 경우
    if (check == mass - 2) {
        if (!d) return 1;
        else if (d == 1 || d == -1) return 2;
        else return 5;
    }
    
    //교대
    if ((arr[start] == arr[start + 2]) && (arr[start] != arr[start + 1])) {
        switch (mass) {
        case 4:
            if (arr[start + 1] == arr[start + 3]) return 4;
            break;
    
        case 5:
            if (arr[start + 1] == arr[start + 3] && arr[start] == arr[end]) return 4;
            break;
    
        default:
            return 4;
            break;
        }
    }
    return 10;

    }

    int countChar(char arr[])
    {
    int i;
    for (i = 0; arr[i] != '\0'; i++) {}
    return i;
    }

    int main(void) {
    int C, idx;
    scanf("%d", &C);

    for (idx = 0; idx<C; idx++) {
        char arr[10005];
        int dp[10005];
    
        scanf("%s", arr);
        int size = countChar(arr);
    
        dp[0] = dp[1] = 999999;
        dp[2] = level(arr, 0, 3);
        dp[3] = level(arr, 0, 4);
        dp[4] = level(arr, 0, 5);
    
        for (int i = 5; i <= size; i++) {
            dp[i] = 999999;
    
            for (int j = 3; j <= 5; j++) {
                int temp = level(arr, i - j, j) + dp[i - j];
                if (temp<dp[i]) {
                    dp[i] = temp;
                }
            }
    
        }
        printf("%d\n", dp[size - 1]);
    }
    
    
    return 0;

    }


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