환형쉬프트 연산하는 JAEHASAFE 문제에서요.. 이 두 방식이 차이가 있나요?

  • skan1543
    skan1543

    시계방향으로 몇번의 환형쉬프트를 해야하는지를
    shift(a,b); // b를 환형쉬프트 해서 a를 만듬.
    으로 정의하구.. 이를 kmp(a+a,b); // b가 a+a안에 등장하는 최소idx
    으로 뒀는데요!

    책에서는 반시계 방향으로 몇번의 환형 쉬프트가 필요한지를

    shift(b,a);로 정의하더라구요.

    저도.. 맞는것같구. 이렇게 해서 첫번째 소스로 정답을 띄웠는데요!

    근데 저는.. 반시계방향을 몇번 해야되는지는,

    (전체길이-시계방향으로 돌릴때 필요한 횟수)라고 생각해서 두번째 소스로 처리해서 제출하니 오답이 뜨네요..

    차이가 없지 않나요? ㅠㅠ... 답답허구만요..

        scanf("%d", &t);
        while (t--)
        {
            string now;
            string need;
            int k, answer = 0;
            scanf("%d", &k);
            scanf("%s", temp);
            now = temp;
            for (int i = 0; i < k; i++)
            {
                scanf("%s", temp);
                need = temp;
                if (i % 2 == 0)
                    answer += calc(need + need, now);
                else
                    answer += calc(now+now, need);
    
                now = need;
            }
            printf("%d\n", answer);
        }
    
        while (t--)
        {
            string now;
            string need;
            int k, answer = 0;
            scanf("%d", &k);
            scanf("%s", temp);
            now = temp;
            for (int i = 0; i < k; i++)
            {
                scanf("%s", temp);
                need = temp;
                if (i % 2 == 0)
                    answer += calc(need + need, now);
                else
                    answer += need.length()-calc(need+need, now);
    
                now = need;
            }
            printf("%d\n", answer);
        }
    

    8년 전
1개의 댓글이 있습니다.
  • Being
    Being

    매칭이 여러 번 일어날 때 가장 첫 번째 결과를 되돌려서 '최소화'했는데, 그걸 전체 길이에서 빼게 되면 '최대화' 하게 되겠죠. 극단적인 경우로 이미 패턴이 동일해서 회전하지 않아도 되는 경우라면 0을 더해야 맞겠죠?


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