백준 알고리즘(Java)

1101번) Fly me to the Alpha Centauri

thiago6 2018. 7. 31. 22:02

정답률 26.811%여서 깜짝 놀랬었는데, 다행히 생각보다는 괜찮았네요.

이동 횟수를 기준으로, '얼마나 많은 거리를 이동할 수 있는가'를 정리해봤습니다.



규칙이 보이는 홀수먼저 잡아보면,



최대 이동거리가 k * k꼴임을 확인할 수 있습니다.


짝수의 경우, 줄어들때도 1씩 줄어야 하는 조건 때문에 

홀수 경우에서 가운데 부분만 빼면 최대 이동거리를 구할 수 있습니다.



그리고 최대 이동거리는 k * k - k꼴이네요.



이를 이용해 주어진 두 지점의 이동거리D라고 했을 때


1. D == k * k

2. 그 외

2-1. (k - 1) * (k - 1) - (k - 1) < D

2-2. (k - 1) * (k - 1) - (k - 1) >= D


위와 같은 로직으로 해결했습니다.



아래는 코드입니다.