시작점(sx, sy)과 목표점(tx, ty)이 있다고 가정하면 시작점에서 끝점까지 일련의 이동이 있는지 확인해야 합니다. 여기에서 이동은 점(x, y)을 가져 와서 (x, x+y) 또는 (x+y, y)로 변환하는 것으로 구성됩니다.
따라서 입력이 (sx, sy) =(1,1) (tx, ty) =(4,5)와 같으면 출력은 True가 됩니다. 이는 (1,1)을 (2, 1), 그 다음 (3,1), (4,1), 다음 (4,5).
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
solve() 함수를 정의합니다. sx, sy, tx, ty가 필요합니다.
-
sx> tx 또는 sy> ty이면
-
거짓을 반환
-
-
sx가 tx와 같으면
-
return(ty-sy) mod sx는 0과 같습니다.
-
-
sy가 ty와 같으면
-
return(tx - sx) mod sy는 0과 같습니다.
-
-
해결(sx, sy, tx-ty, ty) 또는 해결(sx, sy, tx, ty-tx)
반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
def solve(sx, sy, tx, ty): if sx > tx or sy > ty: return False if sx == tx: return (ty-sy)%sx == 0 if sy == ty: return (tx - sx)%sy == 0 return solve(sx, sy, tx-ty, ty) or solve(sx, sy, tx, ty-tx) (sx, sy) = (1,1) (tx, ty) = (4,5) print(solve(sx, sy, tx, ty))
입력
(1,1), (4,5)
출력
True