◯문제 링크◯
◯코드 미리보기◯
range = 1
Num= int(input())
multi = 1
while(1):
if range >= Num:
print(multi)
break
range += 6*multi
multi += 1
◯풀이 과정◯
먼저 이 문제는 혼자 고민해서 푼 것은 아니다. 이렇다 할 진척없이 몇시간동안 같은 부분에서 막혀있어서 결국 검색을 해서 문제를 풀었다.
처음 문제를 보고서 한 행동은 패턴을 찾는 일이었다. 그래서 찾은 패턴이 방의 최소 개수의 범위가 1을 초항으로 6n을 계속 더해주는 방식이라는 것이다. 이런 형태를 보는 순간 예전에 열심히 풀었던 수열들이 생각이 나면서 기억을 더듬어서 어떻게든 활용해보려고 노력했다. 그렇게 일반항이 6n인 등차수열의 합의 공식을 찾아내어 적용시키는데 까지 해내었다. 이것이 문제의 서막이었다.
한참을 고민하다 결국 검색을 통해 알게된 사실이지만, 이 문제는 그렇게 거창한 수식이 아니라 간단한 검증식을 반복을통해서 적용시키면 되는 문제였다. 예전에 참가했던 코딩 대회에서 반복문을 사용해서 시간오버가 걸리면서 반복문을 기피하게 되다보니 너무 어렵게 생각했던 것 같다.
◯코드 해설◯
range = 1
Num= int(input())
multi = 1
→이번 코드에서 사용할 변수들이다. range는 방의 범위를 나타내는 변수이고, num은 입력으로 주어진 방을 저장하는 변수이다. multi는 증가하는 6의 배수를 나타내는 변수이다.
while(1):
if range >= Num:
print(multi)
break
→이번에는 무한 반복을 사용했다. 반복문을 사용한다는 사실이 너무 부담됬는데, 검색을 해보니까 바로 무한반복을 사용을 해서 살짝 놀랐다. 내가 너무 사용하지 않으려고만 생각했던 것 같다.
→if문안은 입력받은 값이 범위를 넘지 않을때 / 지나는 방의 개수를 출력하고 / 반복을 멈추는 코드이다. 이 때 출력되는 값을 그냥 multi변수로 사용 했는데, 처음 multi변수를 선언할 때 값을 1로 주었고 다음에 나오겠지만 if문이 종료되고 값을 증가시키기 때문에 if문 안에서의 multi값은 해당되는 방의 값이랑 동일하기 때문에 그냥 출력했다.
range += 6*multi
multi += 1
→위에서 if문의 조건에 해당되지 않을경우 실행이 되는 코드들이다. range의 범위를 증가시킨 다음에, multi의 값을 증가 시킨다.
◯배운 점◯
⩥반복을 무조건 적으로 기피하려고 하지 말 것
'python > 문제' 카테고리의 다른 글
[백준/2869]달팽이는 올라가고 싶다 (0) | 2021.01.29 |
---|---|
[백준/1193]분수찾기 (0) | 2021.01.27 |
[백준/1712]손익분기점 (0) | 2021.01.23 |
[백준/10951]A+B-4 (0) | 2021.01.05 |
[백준/10952]A+B-5 (0) | 2021.01.05 |