ljh971201   5년 전

사분면의 오른쪽 끝점만 저장하는 방법으로 함수를 구현했는데 숫자가 3까지는 잘나오는데 4부터는 잘 나오지않습니다. 왜이런걸까요 ㅠㅠ

jaeokbr   5년 전

올려주신 코드에서 입력값을 3 1 2 로 주었을때

출력이 6,18 두 가지가 출력됩니다. 일단 3에서도 잘 안되는것으로 보이구요

의도하신데로 동작이 잘 된다고 가정할때도 시간초과가 날 가능성이 커 보이긴 하는데, 현재 코드에서 오동작 하는 포인트를 말씀드리면

원래 길이가 8*8 너비가 64인 사각형을 입력으로 받는 다고 가정하면

zs(64,7,7) 이 메인에서 호출되고

r이 64이므로 아래 네 개를 다시 호출 하게 됩니다.

zs(16,3,3) => 1 사분면 마지막 좌표

zs(16,3,7) => 2 사분면 마지막 좌표

zs(16,7,3) => 3 사분면 마지막 좌표

zs(16,7,7) => 4 사분면 마지막 좌표

이렇게 한 번만 호출 할때는 크게 동작에 문제가 없어 보이는데  다시 재귀 호출 할 때의 동작을 보면

zs(16,3,3) 이 다시

  zs(4,1,1) => xy 좌표 (0,0) , (0,1) , (1,0) , (1,1) 체크

  zs(4,1,3) => xy 좌표 (0,2) , (0,3) , (1,2) , (1,3) 체크 

  zs(4,3,1) => xy 좌표 (2,0) , (2,1) , (3,0) , (3,1) 체크

  zs(4,3,3) => xy 좌표 (2,2) , (2,3) , (3,2) , (3,3) 체크

위 와같이 4개 사분면을 호출 하게 됩니다.

그리고  zs(16,3,7) 이 호출하는 함수를 보면

  zs(4,1,3),  zs(4,1,7),  zs(4,3,3),  zs(4,3,7) 를 호출 하는데

위에서 호출한 zs(4,1,3) 과 zs(4,3,3)을 다시 호출 하고 있습니다.

이분법을 적용하고 있는 중이기 때문에

zs(16,3,7) 이 호출해야할 올바른 파라미터는 zs(4,1,5) , zs(4,1,7), zs(4,3,5), zs(4,3,7) 과 같이

7 의 절반값이 3이 아닌, 2 사분면 체크 범위 중 절반값인 5가 되어야 할 것으로 보입니다.

ljh971201   5년 전

덕분에 해결했습니다 정말감사합니다!

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