Breaking

2019년 1월 15일 화요일

Baekjoon 2292번 벌집 python

Baekjoon 2292번 벌집 python






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

getbee=int(input())
roomNum=1
value=1
n=0
for i in range(getbee):
    n += i
    value = 6*n+1
    roomNum += 1
    if value >= getbee:
        print(roomNum-1)
        break   


다양한 방법이 있겠지만 필자가 발견한 규칙은 다음과 같다.

1번째 방 : 1                => 1개
2번째 방 : 2 ~ 7          => 6개
3번째 방 : 8 ~ 19        => 12개
4번째 방 : 20 ~ 37      => 18개
5번째 방 : 38 ~ 61      => 24개

각 방에 따라 그 갯수가 등차수열임을 볼 수 있다.
또한
각 방마다 마지막 숫자만 나열하면 1,7,19,37,61 etc 로
자세히 살펴보면 6n+1의 형식을 띠는 것을 확인 할 수 있다.

1 =   6 * 0   + 1
7 =   6 * 1   + 1
19 = 6 * 3   + 1
37 = 6 * 6   + 1
61 = 6 * 10 + 1

이 때 n의 값이 등차 수열로 증가함을 볼 수 있다.
0 (+1) 1 (+2) 3 (+3) 6 (+4) 10 ```

이런 규칙을 토대로 우리가 얻은 숫자를 방 구성하는 최대 숫자보다 적으면 그 방의 갯수만큼 프린트하는 코딩을 하면 우리가 원하는 값을 얻을 수 있다.

더 추가 설명이 필요하다면 댓글로 알려주면 설명하겠지만 종이에 한 번 써서 등차수열을 확인하면 금방 이해할 수 있지 않을까한다.

참고로 N=1에 대한 출력을 for문에 한 번에 하고싶었기 때문에 미리 roomNum=1로 초기값을 주었다는 점을 알린다.



ALL RIGHT RESERVED TWINSTARINFO