[백준 2292번-파이썬/Python] 벌집
알고리즘 공부/BOJ백준 풀이

[백준 2292번-파이썬/Python] 벌집

http://acmicpc.net/problem/2292

{코드}

n = int(input())
cnt = 1
while n > 1:
	n -= 6*cnt
	cnt += 1
print(cnt)

{설명}

먼저 규칙을 알기 위해 다음 표를 봐주시기 바랍니다.

숫자 범위

마지막 수의 수식

지난 범위와 6의 계수 차

1

1

1 + (6*0)

0

2~7

2

1 + (6*1)

1

8~19

3

1 + (6*3)

2

20~37

4

1 + (6*6)

3

위의 표를 보면 지난 범위와의 계수 차와 답은 1 차이라는 것을 알 수 있는데 이는 시작점도 포함하기 때문입니다.

그러면 입력받은 수에서 6의 배수별로 빼가며 1보다 작을 때까지 반복하면 됩니다.

이때 1보다 작다라고 하는 이유는 시작이 1이기 때문에 수의 단계의 범위가 6n + 1이기 때문에 6의 배수로만 뺀 경우 반복문이 한번 더 돌기 때문입니다. (7인 경우 6을 빼면 cnt가 2인데 조건이 n>0인 경우 1이 남아 한 번 더 돕니다.)

그러면 예시로 58의 경우 58 - 6*1(52) - 6*2(40) - 6*3(22) - 6*4(-2) 반복 종료 및 cnt 1 증가로 cnt가 5인 상태로 종료합니다.