[백준] 2292번 벌집 파이썬 python
본문 바로가기
Python/Python 코딩테스트

[백준] 2292번 벌집 파이썬 python

by 쏠수있어ㅤ 2022. 2. 4.
반응형

벌집

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 92978 41745 35946 44.808%

문제

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

입력

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

출력

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

예제 입력 1 복사

13

예제 출력 1 복사

3

출처

ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2004 B번

  • 문제의 오타를 찾은 사람: waylight3

 

 

 

정답 코드 : 

n = int(input())

beeHouse = 1
c = 1

while n>beeHouse:
    beeHouse += 6*c
    c += 1
    
print(c)

 

 

 

풀이 : 

  1 (1 + 6*0) 2~7 (1 + 6*1) 8~19 (1 + 6*2) 20~37 (1 + 6*3)
1번부터의 거리 (c) 1 2 3 4

주어진 n의 값이 beeHouse(최초 설정값 = 1)보다 큰 경우, while문이 돌아간다.  (n이 1인 경우 바로 print(c)를 하게 된다.)

beeHouse에 6*c 를 해준 값을 더한다. 여기서 c는 디폴트값 = 1이며 count (1번 벌집부터의 거리)를 말한다. 매번 while문이 돌아갈 때마다 c += 1이 된다. 

처음 beeHouse에 6*c 를 해주게 되면 위 표의 7이 나온다. beeHouse의 값은 1 -> 7 -> 19 -> 37 이렇게 늘어난다. 

위의 표에서 첫번째 줄에 1, 7, 19, 37(1번부터의 거리 c로 나눠진 수 중 가장 큰 수) 을 beeHouse라고 생각하면 된다. 이 수들을 기준으로

n이 1보다 크면 ? 6을 더해주고 count + 1해주고 == 벌집 1로부터 1칸 이동됨

다시 n이 7보다 크면? 6*2를 더해주고 count+1 해주고  == 벌집 1로부터 2칸 이동됨

.

.

.

반복

 

위처럼 beeHouse값이 늘어난다는 것은 아직 n값보다 beeHouse값이 더 작다는 뜻으로 

어느 순간 n값보다 커지게 되면 while문을 실행하지 않고 print(c) 를 하게 된다. 

 

 

반응형

댓글