제로베이스/코딩테스트

[백준] 2292 벌집

진주네카라 2021. 10. 15. 12:58
728x90

문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

 

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

 


풀이 코드 

n = int(input())	# 이해가 쉬운 코드

a = 0 		# 6의 배수를 만들기 위한 숫자
num = 1		# 벌집 안에 있는 숫자
cnt = 1 	# 출력값. 최소 개수의 방

while n > num:
    a += 1
    num += a * 6
    cnt += 1
print(cnt)

 

생각한 과정을 나열 해서 써서 이해가 쉽다.

 

cnt 가 a와 같은 역할이라서

정리할거 정리하면..!

 

n = int(input())	# 필요한 코드만 남음

num = 1
cnt = 1
while n > num:
    num += cnt * 6
    cnt += 1
print(cnt)

 

 

코드 설명

cnt는 1 ,2 ,3..증가하면서   // a와 cnt 같은 역할 이라서 정리

cnt에  6을 곱해 6의 배수 값을 구한다.

 

num은 벌집방에 적힌 숫자다 이 숫자가 1번방의 1부터 시작해서

초기값을 1로 준다.

그 다음

6의 배수 값을 더하면 

1 / 2 ~ 7 / 8 ~ 19 / .. 값이 쌓이고

/ 마다 cnt 증가

cnt 역시 1번방이 개수 1이기 때문에 초기값은 1이다.

 

이렇게 반복하다가

내가 입력한 수 n 값이 num보다 작아지면 출력하여 반복 끝

 

 

 

 

 

 

 

 

728x90

'제로베이스 > 코딩테스트' 카테고리의 다른 글

[백준] 2447 별 찍기 - 10 코드 분석  (3) 2021.10.25
[백준] 10870 피보나치 수 5  (2) 2021.10.20
[백준] 15650 N과 M (2)  (2) 2021.10.19
[백준] 1110 더하기 사이클  (1) 2021.10.15
[백준] 2884 알람 시계  (4) 2021.10.14