코딩테스트/백준(BOJ)
백준(BOJ) - 벌집(2292번) - 파이썬(python)
진한색
2023. 1. 31. 19:56
문제

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

풀이
중앙을 기준으로 몇겹째에 있는가를 찾는 문제다.
1은 1겹/ 2~7까지 2겹/ 8~19까지 3겹/ ... 의 규칙을 가진다.
1겹은 벌집1개 2겹부터 순서대로 벌집의 갯수는 2,8,20 ... 이고 그 차이가 6,12,18..씩 커지는 것을 알 수 있다.
import sys
input=sys.stdin.readline
n=int(input().rstrip())
i=2 # i겹
step=6
res=2 # 2겹의 첫수
while 1:
tmp=res
res+=step*(i-1) # 6의 배수로 커짐
# n이 i겹에 있는 수라면 정답은 i
if tmp<=n<res:
print(i)
break
i+=1
정답은 맞는 것 같지만 94%부터는 시간 초과가 난다
while문을 간단하게 손보자
import sys
input=sys.stdin.readline
n=int(input().rstrip())
# i겹
i=1
# 벌집의 개수
res=1
while n>res:
res+=6*i # 벌집의 개수 6의 배수로 커짐
i+=1
print(i)
728x90