알고리즘/알고리즘_백준

[Python][백준] 2292. 벌집

Jerry_K 2024. 7. 1. 09:58

링크🔗

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


🗒️파이썬 내 코드 풀이

N = int(input())

lst = [1]
K = n = 1

while True :
    K = K + (6*n)
    lst.append(K)
    n += 1 
    
    if K > int(1e10):
        break

if N != 1 :
    for i in range(len(lst)-1):
        
        if lst[i]< N <= lst[i+1] :
            print(i+2)
else:  
    print(1)

 

1. 벌집을 하나 하나 보면 규칙성을 찾을 수 있다.

첫번째 레이어 : 0~1 
두번째 레이어 : 2~7
세번째 레이어 : 8~19
네번째 레이어 : 20~38
. . . 

 

2. 규칙성을 찾아서 식을 작성 해주었고, 각 레이어별 범위를 리스트로 만들어 준다.

 

3. 범위 리스트의 길이만큼 반복문을 돌려서 입력값 N이 해당되는 범위를 찾고 출력해준다. 

 

4. 특수한 경우 (1인 경우)는 따로 if ~ else 문을 통해 처리해준다.

 

🌟 간단한 풀이

N = int(input())

numbox = 1
cnt = 1 

while N > numbox:
    numbox += 6 * cnt
    cnt  += 1

print(cnt)

 

1. 이 코드가 가장 간단한 코드이다. 

 

📌  문제 코멘트

맨 처음 문제를 잘 못 읽어서 시간이 오래 걸렸던 문제이다. 

맨 처음에는 1억 크기의 리스트를 만들려고 했는데, 실행했을 때 너무 시간이 오래 걸려 포기했다,

 

내가 작성한 코드는 리스트를 만들어서, N이 해당하는 범위를 찾아내는 것이고, 

간단한 풀이에 비해 다소 복잡,지저분하다.

 

우선 N의 크기가 1억이니까, 최대한 간결하게 해야한다. 

이런 문제에서는 규칙이 생명 !! 


📚문제

문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

예제 입력 1 복사

13

예제 출력 1 복사

3