🖇️ 문제

📝 코드 계획
1. n 번째 방까지 갈 것인지
2. 최소 개수의 방을 지나가는 조건문
🔍 전체 코드
n = int(input()) #코드 계획 -1 ☑️
a = 1 # 벌집의 시작점
c = 1 # 1번 방부터 n번방까지의 거리 1(1+6*0), 2-7번(1+6*1), 8-19번(1+6*1+6*2), 20-37번(1+6*1+6*2+6*3)
while n>a: # n번방이 이동하는 방 숫자보다 클 때만 계속 이동 #코드 계획 -2 ☑️
a += 6*c # 범위를 늘려줌으로서 칸수 이동하는 것 의미
c += 1 # n칸 이동
print(c)
🖍️ 코드 해설

n을 입력받고, 변수 a와 c도 1로 초기화하여 선언한다.
여기서 a는 중앙에 있는 시작점인 1을 의미하고, c는 n번 방까지의 최소 이동 거리를 의미한다.
위의 그림을 보다시피 중앙을 중심으로 원처럼 방들이 둘러싸고있다.
각 원에 속하는 숫자 중 가장 큰 숫자를 기준으로 식을 구성해보면,
앞 원의 거리+6*c인 것을 알 수 있다.
1번(1+6*0), 2-7번(1+6*1), 8-19번(1+6*1+6*2), 20-37번(1+6*1+6*2+6*3)
n이 이동하는 다음 방 숫자보다 클 때만 계속 이동한다.
한 칸씩 이동하기 때문에 다음 while문이 돌기전 시작점 a도 6*c만큼 이동한다.
한 칸씩 이동할 때, 같은 원에 속하는 방을 통해서 가지 않고,
다음 원에 속한 칸으로 이동하기 때문에 c도 함께 +1을 해준다.
만약 a가 n보다 커지는 즉시 while문을 나오게 되고,
n번 방까지의 최소 이동 거리인 c를 출력한다.