가영이의 스토리

[백준/Python] 백준 2292번 벌집 본문

코딩연습장/백준

[백준/Python] 백준 2292번 벌집

gayomii 2023. 9. 6. 14:22

🏆백준 2292번 - 벌집

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net


✍️문제

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


정답

a = int(input())
n = 1
count = 1

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

💫 해설 및 한줄평

a를 통해 숫자를 입력받는다.

그리고 현재 벌집의 최대 방 번호를 n으로 받는다. 이때 가운데 1부터 시작하기 때문에 1을 더해주고 시작한다.

count로 벌집의 지나는 방 수를 나타낸다. 위와 동일한 이유로 1부터 시작해주었다.

 

벌집의 원리는 6의 배수만큼 늘어난다.

즉, 벌집을 1번 지날때는 2~7번, 2번 지날때는 8~19번 ··· 이런식으로 진행된다.

 

그래서 입력받은 a가 벌집의 개수 n보다 클때 계속반복하도록 while문을 사용하였다.

True일때, 최대 방 번호에 6의 배수만큼 더해주고 count에 1을 더해주는 방식을 반복한다.

 

예를들어, a = 18일때 처음 while문은 a=18 > n=1이므로 반복문을 실행한다.

그러면 n = n(1)+6*count(1)=7이 되고, count는 초기값에 1을 더해주어 2가 된다. (n과 count의 초기값 = 1)

다음 반복문은 a = 18 >  n = 7이므로 반복문을 실행한다. 

그러면 n = n(7)+6*count(2)=19가 되고, count는 2에 1을 더해주어 3이 된다.

다음 반복문은 a  = 18 < n = 19가 되므로 반복문을 멈춰준다.

따라서 그 전 반복문의 count값인 3을 출력한다.

 

이런식으로 계속 n과 count값을 갱신해줘서 조건문을 만족하는지 판별한다!

 

while문 어떻게 돌아가는지 너무 헷갈렸다. 까먹지말기!!

 

 

 

 

 

 

 

Comments