CLCKSYNC 문제 관련해서 질문 드려요.

  • jongyeop.lee
    jongyeop.lee

    알고리즘 문제해결 전략 책에 나와 있는 코드(P171) 그대로 실행했는데
    "오답"이 나오네요.
    고수님들 혹시 아시면 알려주세요.

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    const int INF = 9999;
    const int SWITCHES = 10;
    const int CLOCKS = 16;
    
    const char linked[SWITCHES][CLOCKS + 1] = {
            "xxx.............",
            "...x...x.x.x....",
            "....x.....x...xx",
            "x...xxxx........",
            "......xxx.x.x...",
            "x.x...........xx",
            "...x..........xx",
            "....xx.x......xx",
            ".xxxxx..........",
            "...xxx...x...x.."};
    
    bool areAligned(const vector<int>& clocks) {
        for (int i = 0; i < CLOCKS; ++i) {
            if (clocks[i] != 12)
                return false;
        }
    
        return true;
    }
    
    void push(vector<int>& clocks, int swtch) {
        for (int clock = 0; clock < CLOCKS; ++clock) {
            if(linked[swtch][clock] == 'x') {
                clocks[clock] += 3;
    
                if (clocks[clock] == 15)
                    clocks[clock] = 3;
            }
        }
    }
    
    int solve(vector<int>& clocks, int swtch) {
        if (swtch == SWITCHES)
            return areAligned(clocks) ? 0 : INF;
    
        int ret = INF;
        for (int cnt = 0; cnt < 4; ++cnt) {
            ret = min(ret, cnt + solve(clocks, swtch + 1));
            push(clocks, swtch);
        }
    
        return ret;
    }
    
    int main()
    {
        int numOfCase;
        cin >> numOfCase;
    
        std::vector<int> clocks(CLOCKS, 0);
    
        while(numOfCase) {
            for (int i = 0; i < CLOCKS; ++i) {
                std::cin >> clocks[i];
            }
    
            std::cout << solve(clocks, 0) << std::endl;
    
            --numOfCase;
        }
    
        return 0;
    }
    

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

    불가능할 경우 -1를 출력해야 하는데 깜박했네요.
    감사합니다.


    8년 전 link
  • jongyeop.lee
    jongyeop.lee

    int result = solve(clocks, 0);

    if (result == INT)
    result = -1;

    std::cout << result << std::endl;


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