벌집모양으로 숫자를 전개해갈때, 몇개의 블록을 지나가야하는지 찾는 문제이다.
import sys
n = int(sys.stdin.readline())
# 고리 끝값 1 7 19 37 61 -> 1 , 1+6 , 1+6+12, 1+6+12+18, ... 1+6+ ... + 6^n-1
current = 1 #현재 보고 있는 위치가 어떻게 되니
count = 1 #몇번째고리니
tmp = 1 #무슨 수를 더해야하니
while( n > current):
current += 6*tmp
tmp += 1
count += 1
print(count)
고리의 끝자리 숫자에 규칙이 있어 쉽게 풀었다.
1-7-19-37-61 으로 전개해나가는 숫자의 다음항과의 차이는 6,12,18...으로 6의 배수이다.
즉 몇번째 마지막 수랑 비교해서 그 숫자보다 작으면 그만큼의 불록을 밟은게 되는 것이다.
n: 입력값
current: count 번째 고리의 최댓값
tmp: 다음항에 더해야하는 수의 1/6