본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬, python) - 2292번 벌집(2022.11.03)

by why제곱 2022. 11. 5.

1. 2292번

 

1) 문제

 

2) 풀이

n= int(input ())
room = 1
i = 1

while n > room:
    room += 6 * i
    i += 1
print(i)

 

3) 문법 및 풀이과정

 - 문제 이해 

일종의 군 수열이라고 볼 수 있다.

1군 : 1

2군 : 2 ~ 7

3군 : 8 ~ 19

4군 : 20 ~ 37 

...

위 군 수열의 규칙을 찾아보면 군이 하나씩 증가할 때마다 1군은 1개의 항을 가지고  n군(n>1)은 6(n-1)개의 항을 가짐을 알 수 있다. 따라서 이 항의 개수를 통해 주어진 입력값이 몇 번째 군인지를 알 수 있고 이 때, 몇 번째 군인지가 곧 주어진 방까지 가는 방의 최소 개수라고 볼 수 있다.

 

- 문제 풀이

(1) 입력값을 받는다. 

(2) room =1 / i = 1 이라고 설정한다. 이 때 room은 항의 개수, 방들의 개수를 의미하며 각 군의 마지막 항의 번호를 말한다. i는 room이 다음 군의 마지막 항 값으로 넘어갈 때마다 1을 더하여 몇 번째 군인지를 의미하도록 한다.

(3) n>room일 동안 작동하는 while문을 작성한다. n이 room을 넘어가는 순간 while문은 중단되며 그 때 군의 번호를 출력할 것이다.

(4) while문 내에서 room은 6*i만큼 더해진 후, i에는 1을 더한다. 이 때, i에 1을 더하는 것이 나중에 이뤄져야 최종 출력될 때 해당 군의 r값이 제대로 출력된다.

(5) 군의 번호인 i를 출력한다.