JUMPGAME 왜 맞을까요?

  • abc3242
    abc3242

    문제해결전략 책에 있는 소스를 보고 제가 나름대로 코드를 바꾸었다가, 자꾸 오답이 나서 책과 비슷하게 쓰니 맞았습니다.

    제 눈에 보이는 차이는 원래의 코드는 메모이제이션 배열을 인덱스로 직접 접근했고, 지금 코드는 참조를 쓴 것 밖에 없습니다.

    결과에서 왜 차이가 나는지 도저히 모르겠는데 혹시 알려주실 수 있나 싶어 올려봅니다.

    원래의 코드입니다. (메인함수에선 차이가 없습니다.)

     int board[100][100];
     int memo[100][100];
    int jump(int n, int row, int col){
    
        if(memo[row][col] != -1){
            return memo[row][col];
        }
    
        else if(row == n-1 && col == n-1){
            return 1;
        }
    
        else if(row >= n || col >= n){
            return 0;
        }
    
        int step = board[row][col];
    
        bool answer = (jump(n, row+step, col)) || (jump(n, row, col+step));
    
        memo[row][col] = answer;
    
        return answer;
    
    }
    

    도저히 답이 나오지 않아 책과 유사하게 쓴 코드입니다.

    #include <cstdio>
    
    using namespace std;
    
    int board[100][100];
    int memo[100][100];
    
    
    int jump(int n, int row, int col){
    
    
         if(row == n-1 && col == n-1){
            return 1;
        }
    
        else if(row >= n || col >= n){
            return 0;
        }
    
        int &ret = memo[row][col];
        if(ret != -1){
            return ret;
        }
    
        int step = board[row][col];
    
        return ret= (jump(n, row+step, col)) || (jump(n, row, col+step));
    
    
    
    }
    

    5년 전
1개의 댓글이 있습니다.
  • gzone130
    gzone130

    answer 변수는 bool 타입인데,
    int 형 2차원 배열에 그 값을 대입해서 오류가 나는게 아닐까요?
    VS나 에디터는 이러한 오류를 스스로 수정하기도 하기 때문에..
    물론 전체 코드를 못 봐서 제 추측입니다.


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