멋쟁이v의 개발일지

[백준 2292번] 벌집(파이썬) 본문

0년차/알고리즘(기본 수학)

[백준 2292번] 벌집(파이썬)

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

 

입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

 

예제 입력
13
예제 출력
3

 

 


 

풀이
이 문제는 벌집 안에 수들의 규칙을 파악해내야 합니다.
처음에 1이 있고, 육각형 모양으로 6개의 숫자들이 감싸고 있습니다.
또, 그 주변으로 12개의 숫자들이 감싸고 있네요.

벌집 모양으로 감싸져 있는 숫자들의 규칙을 보면
1 6 12 18 ... 
바깥 숫자의 개수가 6의 배수로 늘어난다는 규칙이 있습니다.

1에서 N번 방까지 최소 개수의 방을 지날 때 몇 개의 방을 지나는지를 계산해야 되는데요.

예제에서 13이 주어졌을 때 출력이 3이 됩니다.
1 > 1번
1 + 6 = 7 > (주어진 숫자가 2~7이면) 2번
1 + 6 + 12 = 19 > (주어진 수가 8~19이면) 3번
정답 : 3

코드를 순서대로 작성한다면
1. A, B, C를 입력
2. B >= C 이면 -1 출력
3. A / (C - B) 의 노트북 개수에서 +1 해서 출력


작성 코드
N = int(input())

sum = 1 # 숫자 1부터 시작
room = 1 # 숫자 1은 1번 방부터 시작

if N == 1: # 숫자 1일땐 1출력
    print(1)
else:
    while True: # 정답이 나올때까지 반복
        if N <= sum: # 6의 배수를 더한 값 안에 주어진 값이 있다면 방 수를 출력하고 탈출
            print(room)
            break
        
        sum += (6 * room) # 1 + 6(6*1) + 12(6*2) + 18(6*3) ...
        room += 1 # 6의 배수가 될 때마다 방을 +1
728x90
320x100
Comments