[백준] 2292: 벌집 - 파이썬 [python]

다인·2024년 8월 16일

백준

목록 보기
35/112
post-thumbnail

규칙을 찾으려고 이틀째 생각했다 물론 잠깐씩이긴 했지만ㅎ
이틀째에 드디어 규칙이 보이기 시작했고, 달팽이 문제처럼 x를 이항해서 풀려고 했는데 규칙이 2차방정식이라 실패.. 규칙을 어캐 적용할까 고민하다가 구글링으로 사알짝만 참고! 규칙을 세는 방법만 적용했고 나머진 내 머리로 풀어보았다. 머리를 쥐어짜며 실패하다 성공했을 때의 기쁨이란..🥹 이 맛에 코테 문제 풀징ㅎ

코드

num = int(input())
room = 1
count = 1

while num > room:
    room += count*6
    count += 1

print(count)

풀이

규칙

규칙을 찾으려고 애썼고, 우선 벌집줄(가운데를 기준으로 육각형 모양으로 감싸는 줄)들끼리 묶어보았다.

이렇게 말이다. 그랬더니,
1. 1
2. 2~7
3. 8~19
4. 20~37
5. 38~61
... 이렇게 묶였고, 마지막인 1, 7, 19, 37, 61을 기준으로 보자.
그러면 6, 12, 18, 24씩 증가하는 것을 알 수 있다!
공차도 수열이기에 2차방정식이 나왔던 것이다..

규칙을 적용해보자

자 그러면 어떻게 이 규칙을 활용할 것인가?
나는 우선 규칙을 코드로 만들기 전에 저 규칙이 맞는지를, 즉 쓰일 방법이 있는지를 생각했다.
우리는 벌집방을 몇 번을 지나가는지를 구해야 한다. 예제에 있는 애들을 따라 해보니, 지나가는 횟수는 딱 구하고자 하는 수가 속한 줄 번호와 동일한 것을 발견했다!!!
아하 그러면 나는 입력받은 번호가 몇 번째 줄에 묶이는지를 구하면 되겠군!

규칙을 코드로 표현해보자

여기가 난관이었다..
6을 뭔가 활용해야 되는 건 알겠는데 더 이상은 정말 모르겠더라...
결국 검색을 했고ㅠ 우리가 구하고자 하는, 지나가는 횟수를 처음에 1로 두고 하나씩 증가시키면서 6을 곱하더라!!! wow 너무 똑똑하다....

코드 뜯어보기

규칙을 어떻게 적용할지와 표현할지를 알았으니 정답인 코드를 한 줄씩 봐보자.

num = int(input())
room = 1
count = 1

while num > room:
    room += count*6
    count += 1

print(count)
  1. 먼저 입력을 num으로 받는다
  2. 가장 첫째 줄은 방 번호가 1로 시작하고, 이 1번 방에 가면 1개의 방을 지나간다. 그래서 room=1, num=1로 두었다. 즉, 여기서 room은 앞에서 살펴보았던 1, 7, 19, 37, 61,...이 되는 것이다. count는 우리가 구하고 싶은, 방을 지나가는 횟수이고.
  3. 그러면 우리는 몇 번째 줄에 속하는지 찾을 때까지 while문을 돌려야 한다. (for문도 가능한데 나는 while문으로 했다.) 당연히 room이 num을 넘어가기 전까지 하면 되겠다.
    여기서 주의할 점은 =을 포함해서는 안된다는 것이다. 왜냐? room은 앞서 살펴보았던 줄에서 가장 끝에 있는 수이다. 즉, 거기까지가 해당 줄에 포함되는 방 번호이기 때문에 =을 포함해버리면 같을 때 while문이 한 번 더 실행돼서 count가 1 증가해버린다.
    이해가 안된다면, num이 1, 7, 19..일 때를 대입해서 count를 구해보면 알 수 있을 것이당
  4. 반복문이 실행된다는 것은 전의 줄(방들을 묶은 줄을 말하는 것이다)에서 num이 포함되지 않았기에 다음 줄로 넘어가야 한다. 그래서 room에 count*6을 더하는 것이다. count도 1씩 증가하고 6만 곱하면 딱 등차랑 일치해서 가능한 것이다! 어쩜.. 이렇게 예쁜 코드가..,,
  5. 그리고 다음 줄로 넘어가기 전에 1을 더한다.
  6. 또 한 가지 주의할 점은 room += count*6과 count += 1의 순서이다. 처음에 둘을 바꿔 써서 틀려버렸다.. 이유는 간단하다. room은 count를 곱한 수를 더한다!!! 그래서 count를 먼저 더해버리면 등차가 완전히 달라져버린다.
    이 역시도 이해가 안된다면 주어진 값인 13일 때를 대입해서 확인해보길 바란당

결과

오 잘 풀었나보다 시간이 짧다 짧아 😎
백준 재밌다 히히

0개의 댓글