백준

백준 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)