올려주신 코드에서 입력값을 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년 전
사분면의 오른쪽 끝점만 저장하는 방법으로 함수를 구현했는데 숫자가 3까지는 잘나오는데 4부터는 잘 나오지않습니다. 왜이런걸까요 ㅠㅠ