BOJ2292 벌집

Hoeun Lee·2021년 8월 21일
0

백준 알고리즘 풀이

목록 보기
11/34
post-thumbnail

문제

BOJ2292 벌집
브론즈II | 백준 2292 | Python3 파이썬 풀이


알고리즘


그림이 조금 어지럽지만 색칠을 하면 생각보다 쉽게 규칙을 발견할 수 있다.

색칠한 육각형 그룹을 껍질이라고 하겠다. 주황색이 1껍질, 노란색이 2껍질.. 이다.
빨간색 화살표는 다음 껍질로 넘어가는 경계가 맞닿은 두 칸이다.

1을 제외하고 첫 번째 껍질부터 흰색 박스를 보면

  • 2부터 7까지 1블록 씩 6번 (2부터 6개)
  • 8부터 19까지 2블록 씩 6번 (8부터 12개)
  • 20부터 37까지 3블록 씩 6번 (20부터 18개)
  • 38부터 61까지 4블록 씩 6번 (38부터 24개)
    ...
    위와 같은 규칙을 찾아낼 수 있다.

이를 코드로 짜려면
  • N == 1이라면 1 출력 (예외)
  • 2부터 첫 번째 껍질이므로 1씩 6번 증가 (2 + (6 * 1) == 8)
  • 8부터 두 번째 껍질이므로 2씩 6번 증가 (8 + (6 * 2) == 20)
    ...

(껍질 시작 값 + (껍질 번호 x 6))을 하면 다음 껍질의 시작 번호를 얻을 수 있다.
어떤 수가 다음 껍질보다 작다면 해당 껍질에 속해있는 것이므로 껍질 번호를 출력한다.


코드

import sys

input = sys.stdin.readline

N = int(input())

# N == 1인 경우 예외
if N == 1:
    print(1)
    exit(0)

c = 1 # 껍질 번째 
n = 2 # 껍질의 시작값
while True:
    n = (n + (6 * c)) # 다음 껍질 범위 계산
	
    # 다음 껍질보다 작으면 출력
    if N < n:
        print(c + 1)
        exit(0)
	
    # 껍질 +1
    c += 1

결과

profile
건국대학교 컴퓨터공학부 이호은 | 알고리즘 정리 블로그

0개의 댓글