백준
백준 2292번 어떻게 풀었나
kimbro6
2023. 1. 13. 00:01
이 문제는
이 문제를 이상한 방향으로 생각하다, 시간이 너무 많이 걸릴거 같아서 답을보고 정리하기로 했다.
어떻게 푸나
문제 해석하기
우선 문제를 풀려면 다음과 같은 표를 생각해야 했다.
답 | 1칸 | 2칸 | 3칸 | 4칸 | ... |
범위 | 1~1 | 2~7 | 8~19 | 20~37 | ... |
갯수 | 1개 | 6개 | 12개 | 18개 | ... |
표 설명
- 답이 1칸인것, 2칸, 3칸인 N의 범위를 새어 보고, 그것의 갯수를 나타낸 표 이다.
- 갯수가 두번째 부터는 6, 12, 18로 6의 배수 만큼 늘어난다.
계획하기
위의 표 설명을 바탕으로 계획하면 된다.
위의 표의 범위에 따라서 답을 출력해 줄 것이다.
그렇게 하려면, 범위를 잡아줄 기준이 필요하다.
그 기준은 1, 7, 19, 37, ... 이다.
N이 기준보다 작거나 같고, 이전 기준보다 크다면, 기준에 따른 답이 나온다.
즉, 다음과 같이 반복되는 if문을 작성 해 주어야 한다.
i) N <= 1 이면, 답은 1칸
ii) N <= 7 이면, 답은 2칸
iii) N <= 19 이면, 답은 3칸
iiii) N <= 37 이면, 답은 4칸
위의 예시에서 케이스가 달라질때, 달라지는 값은 부등호 오른쪽에 있는 기준값과, 답이다.
여기서 문제가 되는것은 기준값은데, 기준값 설정을 잘 해 주어야 한다.
다음과 같이 기준값을 t, 답을 cnt로 하여 작성하면 이를 구현할 수 있다.
코드
N = int(input())
t = 1
cnt = 1
while N > t:
t += 6 * cnt
cnt += 1
print(cnt)