phamon1   1년 전

처음에 go함수의 인자로 index만을 받아서 사다리를 놓을때 중복되는 것이 있어 시간초과가 났습니다.

그래서 지금까지 검사한 사다리 방법을 중복하지 않게 하기 위하여 go함수의 포문 i, j 를 sx, sy인자로 보내 

go(index + 1, i ,j); 이렇게 재귀를 돌려 그 부분부터 다시 검사하도록 하였습니다. 근데 이렇게 하면 답이 틀렸더라구요

그래서 go(index + 1, sx ,j); 이렇게 돌려보니 답이 맞다고 뜨는데 이유를 모르겠습니다 ㅜㅜ

이중포문으로 사다리 위치를 정하고, 사다리를 놓았을 때 check문으로 결과가 같은지 확인 후 같지 않으면 재귀를 돌리는데 현재 i번째 줄 세로 j 구역의 사다리를 검사했으니 인자로 보내 포문을 i,j 번째부터 돌리면 맞는 것 아닌가여? ㅜㅜ 

설명이 너무 이상한 점 죄송합니다 ㅜㅜ 코드 참고 해주세요. 너무 궁금합니다!

osthus   1년 전

 go(index + 1, i ,j)와 같이 호출하면 for문안에서 i가 1 증가했을 때 (i+1, j)부터 탐색하기 때문에 (i, 1) ~ (i, j-1)까지는 확인하지 않습니다. 

i를 sx로 바꿨을 때는 sx = 1로 고정이기 때문에 위와 같은 문제가 발생하지 않고 통과되는 것 같습니다. 참고로 j를 sy로 바꿔도 똑같은 이유로 통과됩니다. 

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