인프런 커뮤니티 질문&답변

Raerae님의 프로필 이미지
Raerae

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

7-C

7-C 질문

해결된 질문

작성

·

103

0

안녕하세요 선생님! 항상 수업 잘 듣고 있습니다

다름이 아니라 저는 dp에 값이 있으면은 사이클이 생긴다는 가정으로 최대숫자를 반환해서 처리하였는데요.

몇 번 시도하였는데 계속 틀림이 뜨네요 ^^;
http://boj.kr/56bf4bf2cf4d411fb652d50f54160a7e

그래서 선생님 답안을 보았는데 visited 배열을 따로 만드시고 나중에는 방문 미처리를 해주셨더라고요. 나중에 방문 미처리 해주시는 것이 이해가 잘 안가 왜 그렇게 해주셨는지 궁금합니다!

 

미리 감사드립니다~ 🙇‍♀

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

    check[y][x] = 1;
    int value = (int)b[y][x] - '0';
    for(int i = 0; i < 4; i++){
        int ny = y + dy[i] * value;
        int nx = x + dx[i] * value;
        ret= max(ret,down(ny,nx) + 1);
    }
    check[y][x] = 0;

이부분 말씀이시죠?

예를 들어

a -> b -> c -> d

를 간다음

a -> b -> d -> c

를 가야 한다고 해볼게요.

이 경우 c, d가 방문되어있다면 d -> c라는 경우의 수를 파악하지 못하겠죠?

모든 경우의 수를 파악하기 위해서 하는 장치라고 보시면 됩니다.

 

감사합니다.

Raerae님의 프로필 이미지
Raerae

작성한 질문수

질문하기