반응형

www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

문제 설명

위 링크의 문제에 나온 것 처럼, 입력 한 숫자가 들어있는 칸에 가기 위해서 1번 칸 부터 거쳐야 하는 칸의 수를 출력하면 된다.


풀이 과정

1번이 가운데 기준으로 첫 번째 주기라고 했을 때 1,

2번째 주기는 2~7

3번째 주기는 8~19

4번째 주기는 20~37

5번째 주기는 38~61

 

이렇게 나타나며 각 주기의 끝자리가 6의 배수처럼 늘어나는 것을 알 수 있다.

즉, 1->7->19->37->61 은 6->12->18->24 이렇게 늘어난다.

그래서 1번 거쳐야 하는 방의 수는 1개,

2번 거쳐야 하는 방의 수는 6개

3번 거쳐야 하는 방의 수는 12개

4번 거쳐야 하는 방의 수는 18개 ... 이런 식으로 규칙적으로 늘어나게 됨을 알 수 있다.

 

따라서 다음과 같이 코드를 작성할 수 있다.

1인 경우는 1개이며, 2인 경우부터 내가 찾고자 하는 숫자가 현재 바퀴의 최대값보다 작으면 그 바퀴에 있으므로

그 바퀴를 출력해주면 된다.

n = int(input())

cur = 1
plus = 6
circle = 1
if n == 1:
    print(1)
else:
    while True:
        cur += plus
        circle += 1
        if n <= cur:
            print(circle)
            break
        plus += 6

 

https://github.com/HongEunho

전체 문제 & 코드는 위의 깃에 정리되어 있습니다.

팔로우 & 맞팔은 환영입니다 !

반응형

+ Recent posts