[Python]BaekJoon.AC

[Python]백준 BaekJoon.AC 2292 : 벌집(list)

스뇨잉 2022. 1. 5. 21:39
728x90
728x90

 

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

 

 

 

벌집이 층마다 가지고 있는 최대값을 살펴보면 1, 7, 19, 37, 61, 91····으로 이루어져 있다.

이는 이전 값에 +6, +12, +18, +24, +30···· 씩을 더한 값이다. 또한 이는 6의 배수만큼씩 늘어난 값이다.

 

리스트에 각 껍데기마다 가지고 있는 최대 주소를 저장한다.

i와 n을 이용해 for문과 유사한 기능을 구현했다. 그냥 for문을 사용할까 했는데.. while을 사용해봤다.

i가 1씩 늘어날 때마다 n과 곱해 이전 껍데기 최대 주소에 더해줬다. n을 6으로 설정했기 때문에 ixn은 6의 배수가 된다.

 

 

Q = int(input())
layer = [1] #layer 리스트에 껍데기의 최대 주소를 저장. layer[0]은 1이며, 첫 껍데기를 의미함
i = 1
n = 6

while True:
    a = len(layer) #이전 껍데기의 최대 주소를 알아내기 위해 껍데기 수 조사

    if Q <= layer[a-1]: #껍데기 수에서 1을 빼야 리스트 순서와 맞음. layer[0]이 첫 껍데기니까.
        print(a)
        quit()

    layer.append(layer[a-1] + i*n)
    i = i + 1

 

 

728x90
728x90