벌집

import sys


def main():
    input = sys.stdin.readline

    n = int(input())
    d = 0
    while n > 1:
        n -= 6 * d
        d += 1

    print(d)


main()

$1$번 방에서 거리가 $d$로 같은 방들은 육각형을 이루고, 그 개수는 $6d$개입니다. 따라서 주어진 방 번호에서 $6d$를 빼면서 남은 값이 $1$보다 작아지는 순간의 $d$가 정답입니다.

OEIS

OEIS(Online Encyclopedia of Integer Sequences; 온라인 정수열 사전)은 정수열에 대한 정보를 모아둔 온라인 데이터베이스입니다. 찾으려는 정수열의 일부 항들을 입력하면 해당 정수열을 찾아주고 그 정수열의 다양한 속성들을 보여줍니다.

예를 들어, 이 문제에서 등장하는 수열 $1$, $7$, $19$, $37$, $61$을 입력하면 A003215 수열이 나옵니다. 특히 comments, formula, prog 부분의 내용을 보면 문제해결에 도움이 될만한 정보들이 많습니다.

a(n) = 3*n*(n+1) + 1, n >= 0
a(n) = (n+1)^3 - n^3
a(n) = a(n-1) + 6*n

그러면 거리가 $d$ 이하인 방의 개수는 $(d+1)^3 - d^3$개라는 점을 이용하는 등 다양한 풀이를 생각해볼 수 있습니다.

댓글