상세 컨텐츠

본문 제목

[백준] 2292 벌집 (Baekjoon Problem 2292: Honeycomb)

파이썬

by Riella 2023. 8. 16. 17:33

본문

728x90

문제 출처

[문제 요약]

출처: 백준 사이트

다음과 같은 벌집 모양의 방들이 있다. 각 방의 번호들은 중앙의 1부터 시작해 1씩 늘어난다.

숫자 n이 입력으로 주어졌을때 최소로 지나가는 방의 개수를 출력해야한다.


[풀이]

원소의 보어 모형과 비슷하게 생각하고 풀었다.

벌집의 한 가운데를 level1, 그 주변에 맞닿아있는 방들을 level2라고 하면 방이 늘어나는 개수는 아래 그림과 같이 6의 배수로 늘어난다.

level2 모서리 = 6 * 1(level1)

level3 모서리 = 6 * 2(level2)

현재 레벨까지 포함되는 방의 최대 번호를 nums라는 변수로 두자.

그러면 입력으로 주어진 n보다 nums가 같거나 클 때까지 룹(loop)을 돌림으로써 n이 방을 몇 번 거쳐야하는지 계산 할 수 있다.

 

룹 안에서는

nums에 이전 레벨 * 6만큼 더해준다

level을 하나 올려준다


[유의할 점]

  • 시작점도 방 하나로 포함되기 때문에 아래 함수에서 level의 시작을 1로 두었다.
  • nums역시 입력인 n이 1일때 룹을 즉시 나올 수 있게 방 하나는 이미 더해주었다.


[파이썬 3 코드]

# -*- coding: utf-8 -*-
from sys import stdin

def count_room(n):
    level = 1
    nums = 1
    while n > nums:
        nums += level * 6
        level += 1

    return level

if __name__ == "__main__":
    n = int(stdin.readline())

    print(count_room(n))

관련글 더보기

댓글 영역