[Python] 백준 2292번 - 벌집

유빈·2025년 1월 8일
0

Algorithms

목록 보기
14/35
post-thumbnail

백준 문제집 PS

ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)

이번 방학 2달동안 다 푸는 것이 목표입니다.

25.01.08 - 브론즈 5문제

문제문제 제목문제 티어문제 링크
23971ZOAC 4브론즈 3https://www.acmicpc.net/problem/23971
5073삼각형과 세 변브론즈 3https://www.acmicpc.net/problem/5073
2292벌집브론즈 2https://www.acmicpc.net/problem/2292
1157단어 공부브론즈 1https://www.acmicpc.net/problem/1157
2816디지털 티비브론즈 1https://www.acmicpc.net/problem/2816


2292번 - 벌집


전체 코드 및 설명

input = open(0).readline

tmp = 1
N = int(input())

for i in range(1, 10000000):
    tmp += (6 * i)
    if N == 1:
        print(1)
        break
    elif N <= tmp:
        print(i+1)
        break
    else:
        i += 1

벌집은 위와 같은 규칙을 가지고 있다. 첫 번째 원에서는 1번 방만 있고, 두 번째 원에서는 2-7번 방, 세 번째 원에서는 8-19번째 방이 있다. 이렇게 1개, 6개, 12개, 18개, 24개...로 6의 배수의 개수로 방을 가진다. N이 속하는 n번째 원이라고 가정하면, 주어진 수 N번 방이 거치는 최소의 방의 개수는 n이다.

위의 코드에서 tmp는 (i+1)번째 원에서의 가장 큰 수이다. 예를 들어, 3번째 방에서는 19번째 방이 가장 크므로 (i+1)가 3일 때는 tmp = 19이다.


위의 코드에서 중복되는 로직을 제거하기 위해 다음과 같이 수정해주었다.

input = open(0).readline

N = int(input())

if N == 1:
    print(1)
else:
    tmp = 1
    for i in range(1, 10000000):
        tmp += 6 * i
        if N <= tmp:
            print(i + 1)
            break


profile
🌱

0개의 댓글