jisu0415   4년 전

제가 계속 디버깅해본바로는, 

질문에 올라와있던 테스트케이스 중 하나인데

3
256 8 128
16 0 256
0 8 0

일 경우 정답이 위-오른쪽-위-왼쪽-위  로 할 경우 최대 512가 나와야 하는데 저는 256이 나옵니다.

이것을 재귀로 안하고 바로 위-오른쪽-위-왼쪽-위 로 한번에 진행할 수 있게 코드를 바꾸어 진행해보았을 때는 정상작동했고,

재귀로 다시 확인했을 때, 재귀를 실행하는 중에 예를들어 

1번쨰실행-2번째실행-3번째실행-4번째실행-5번째실행 이것이 재귀적으로 반복된다고 하면

2번쨰 실행해서 방향에따라 3번째 실행을 4회 하게되잖아요, 근데 이때 2번쨰 실행해서 나온 값이 동일해야하는데 유지되는거 같지않습니다.. ㅜㅜ (확실하진 않지만, 제가 확인했을 때는 그런것같습니다)

코드는 방향별로 값 두개를 합치는 것과, 한쪽으로 밀어주는 코드를 다르게 작성하였고, 5회를 끝내면 최대값을 찾는 코드입니다.

오작동 되는 테스트케이스를 하나 더 첨부하겠습니다

3
0 8 1024
4 0 4
0 1024 32

rhdqor213   4년 전

play 함수의 인자 int pan[][20]은 주소값을 넘겨주는 방식이기 때문에 함수가 작동하면 251번째 줄에서 주소값을 넘겨준 변수 int game_pan[20][20]의 값이 바뀌게 됩니다.

글에 쓰신 "근데 이때 2번쨰 실행해서 나온 값이 동일해야하는데 유지되는거 같지않습니다.. ㅜㅜ" 가 이것 때문에 일어나는 현상이고요.

해결법으론 함수 안에서 int pan[][20]의 값을 복사해서 사용하는(값을 직접적으로 바꾸지 않는) 방법 등이 있겠네요.

jisu0415   4년 전

감사합니다 !! 해결했습니다. 

그리고 전역변수로 받았던 인풋값을 main안의 지역변수로 바꿔주었습니다.

댓글을 작성하려면 로그인해야 합니다.