
백준 문제집 PS
ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)
이번 방학 2달동안 다 푸는 것이 목표입니다.
25.01.08 - 브론즈 5문제
문제 문제 제목 문제 티어 문제 링크 23971 ZOAC 4 브론즈 3 https://www.acmicpc.net/problem/23971 5073 삼각형과 세 변 브론즈 3 https://www.acmicpc.net/problem/5073 2292 벌집 브론즈 2 https://www.acmicpc.net/problem/2292 1157 단어 공부 브론즈 1 https://www.acmicpc.net/problem/1157 2816 디지털 티비 브론즈 1 https://www.acmicpc.net/problem/2816


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