백준 알고리즘(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
위와 같은 로직으로 해결했습니다.
아래는 코드입니다.