백엔드 개발자 - 젤리곰 2024. 2. 8. 01:19
728x90

1. 문제

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

 

 

⭐문제요약

#입력값은 N(1 ≤ N ≤ 1,000,000,000). N이 1에서 얼마나 떨어져있는가를 출력해주면 된다.

 

처음엔 벌집 그림만 보고 엥? 이게  왜 브론즈? 했는데

천천히 살펴보니 규칙이 숨어있었다.

 

2. 풀이

벌집은 어찌보면 여러개의 원판으로 볼 수 있다.

몇 번째 레이어에 속해있는지 안다면 1에서 얼만큼 떨어져 있는지 알 수 있다.

 

def find_layer(n):
    if n == 1:
        return 1
    layer = 0 #시작 레이어를 0으로 초기화
    count = 1 #최소 count가 1임
    while n > count:
        layer += 1 # 바로 다음 레이어로 이동
        count += 6 * layer # 다음 레이어의 마지막 방 번호
    return layer + 1 # 현재 레이어에 +1 반환

N = int(input())
print(find_layer(N))
728x90