백준 알고리즘 문제 풀이 [Python]

[백준/Python] 2292번 벌집 (기본수학1)

wlalsu_u 2023. 2. 23. 20:06

2292번 : 벌집 문제

 

 

 

 

위의 그림과 같이 육각형으로 이루어진 벌집이 있다.

 

그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.

 

숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.

 

예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

 

 

 

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

 

 


 

풀이 코드

 

n = int(input())

count = 1

# 1단계인 경우
if n == 1:
    print(1)

# 1단계 이상인 경우
else:

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

 

 

 

+ 문제 풀이 포인트)

1을 중심으로 6의 배수마다 한 겹씩 벌집이 늘어남
▶ 최소 이동 거리를 구하기 위해서는 6의 배수를 이용

 

 

 

n = int(input())

 

 

- 첫째 줄에서 자연수 n을 입력받음

 

- input() 은 한 줄의 문자열만 입력받을 수 있음

 

- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용

 

 

 

count = 1

 

 

- 벌집 중앙 1에서 n번 방까지 최소 몇 개의 방을 지나야 하는지를 세는 변수 count

 

- 1번방에서 시작하므로, 무조건 하나의 방은 지나야 함

   따라서 1로 초기화

 

 

 

if n == 1:  print(1)

 

 

- n이 1인 경우, 1번 방에서 1번 방까지 하나의 방만 지나면 됨

 

- 따라서 최소 방의 개수로 1 출력

 

 

 

else:  n -= 1

 

 

- n이 1 이상인 경우, n번 방까지 가는 최소 방의 개수를 세어야 함

 

- n 에서 1단계까지 가는 과정을 순차적으로 빼줌

 

- 먼저, 1단계에 해당하는 1을 빼기

 

 

 

while n > 0:

 

 

- n이 0과 같거나 작아지기 전까지 while 문 반복 수행

  ( n이 1일 때까지)

 

 

 

n -= 6 * count

 

 

- 1을 중심으로 6의 배수마다 한 겹씩 벌집이 늘어남

 

- n에서 6씩 누적하여 빼주면 최소 거리를 구할 수 있음

 

 

 

count += 1

 

 

- 6의 배수마다 벌집이 한겹씩 늘어나므로, count 값을 1 증가

 

 

 

print(count)

 

 

- 벌집 중앙 1번 부터 n번 방까지 가는 최소 개수의 방 count 출력

 

 

 

 

 

 

 

 

나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.

https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC