벌집이 커질수록 그 둘레는 6의 배수의 누적합이 된다.
1을 기준으로 시작하면,
1 -> 7 -> 19 -> 37 ... 순으로 누적된다.
그렇다면, 원하고자 하는 방번호로 가기위해서는 어떻게 해야할까.
바로 내가 가고자 하는 방번호가 6의배수의 누적 합 사이에 있는지 파악하면된다.
예를 들어 14번방에 가고 싶다면,
14라는 숫자는 6의 0~1(6)배수의 합과 6의 0~2배수(18) 합 사이에 있으니,
자기 자신 포함 + 2(6의 2배수)를 하면 14번방으로 이동하는 가장 최소 횟수가 된다.
import java.io.IOException;
import java.util.Scanner;
public class BJ_2292 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt(); //목적지 방 번호
if(a < 1 || a > 1000000000) return;
if (a == 1) {
System.out.println(1);
return;
}
int sumOfMultiples = 0;
int m = 0;
while (true) {
if(sumOfMultiples < (a - 1) && (a - 1) <= (6 * ++m) + sumOfMultiples){
break;// a-1은 6의 배수로 계산하기 편하게
}
sumOfMultiples = (6 * m) + sumOfMultiples;
}
System.out.println(m + 1); //자기 자신 + 이동 횟수
}
}