728x90
 

2292번: 벌집

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

www.acmicpc.net

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

풀이

한 층 바깥의 벌집으로 나갈 때마다 6*층의 수만큼 값이 증가한다!

시작 단계인 1층은 1개, 2~7까지인 2층은 6개의 방이 존재하고, 8~19까지인 3층은 12개의 방이 존재한다.

이후 같은 규칙이 반복된다.


1: 1
2~7 (6) : 2
8~19 (12) : 3
20~37 (18) : 4
38~61 (24) : 5

 

방 번호를 받은 뒤 방 번호보다 각 층의 마지막 값이 클 경우까지 계산하는 반복문을 돌린다.

예를 들어 13을 받을 경우,

첫 번째 반복문에서 각 층의 마지막 값(cal)이 기본인 1에서 7로 증가하고 결과값은 2로 증가한다. 아직 n보다 작으니 한 바퀴 더 돌린다.

두 번째 반복문에서 cal은 7+ (6 * 2) = 19가 되고, 결과값은 3이 된다.

그리고 n보다 cal이 커졌기 때문에 반복문은 break된다.

n = int(input())
cal,res = 1,1
while n>cal:
    cal+=(6*res)
    res+=1
print(res)
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기