폴리오미노에 대해 문제가 궁금해서 올립니다.

  • loveljh
    loveljh

    [폴리오미노]http://algospot.com/judge/problem/read/POLY

    풀다가 메인문을 만들고 있었습니다.

    while(testCase--){
        int n;
        int cnt=0;
        cin>>n;
    
        for(int first = 1 ; first <= n; ++first){
            cnt += poly(n,first);       //why
            cnt %=MOD;
        }
        cout<<cnt<<endl;
    }

    저 while문 안에 for문을 돌때 생각을 해봤었습니다.
    first가 0에서 n-1 까지랑 1에서 n까지 가는게 왜 다를까라는 생각이 들었습니다.

    첫번째로 오는게 0이면 나머지n개로 만드는거 니 n이랑 머가 다를까라는 생각이 들어서 올립니다.


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

    제가 질문의 의도를 파악하지 못하겠습니다만, 0부터 세시든 1부터 세시든 편하신 대로 하시면 됩니다.


    10년 전 link
  • JongMan
    JongMan

    다르지 않죠. 같은 값을 계산하는 방법이 하나만 있어야 하는 것은 아니죠? 두 값을 더할 때 (a+b)도 되지만 (a+b+0)로 계산해도 다르지 않은 것과 마찬가지겠죠.


    10년 전 link
  • loveljh
    loveljh

    아 제가 글을 어렵게 적어놨었네요...
    poly 함수가
    //n개의 정사각형으로 첫줄에first개 정사각형을 포함하는 수를 반환
    하는 함수였습니다.

    0 ~ n-1 를 계산 할때와 1 ~ n까지 계산할때 값이 달라서 물어봤었습니다.


    10년 전 link
  • JongMan
    JongMan

    이 코드를 기준으로 말씀드리면.. poly() 함수의 가정을 위반했기 때문입니다. poly 함수는 first가 양의 정수라고 가정합니다. 이 가정은 첫 번째 줄과 두 번째 줄을 몇 가지 방법으로 붙일 수 있는지를 계산할 때 사용됩니다. first에 0이 주어질 경우, 0과 두 번째 줄을 second-1개의 방법으로 붙일 수 있다고 생각하지요. 물론 붙이는 방법은 하나밖에 없습니다.

    그리고 0부터 n-1까지 세는 방법으로는 가로 한줄로 구성된 폴리오미노는 못 셉니다 0부터 n까지 세면 몰라도요.


    10년 전 link
  • loveljh
    loveljh

    아 그러네요...
    0부터 n-1 까지 세는 방법이면 가로 한줄로 된건 못세는군요.
    JongMan님 감사합니다 ^^


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