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인 상태로 종료합니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 2869번-파이썬/Python] 달팽이는 올라가고 싶다 (0) | 2020.10.31 |
---|---|
[백준 1193번-파이썬/Python] 분수 찾기 (0) | 2020.10.17 |
[백준 2839번-파이썬/Python] 설탕 배달 (0) | 2020.10.15 |
[백준 1712번-파이선/Python] 손익분기점 (0) | 2020.10.15 |
[백준 1316번-파이썬/Python] 그룹 단어 체커 (0) | 2020.10.14 |