250x250
Notice
Recent Posts
Recent Comments
Link
멋쟁이v의 개발일지
[백준 2292번] 벌집(파이썬) 본문
728x90
320x100
문제
![](https://blog.kakaocdn.net/dn/cMkSVt/btrSq9SDs2p/NPKGeUAFK2jqnILkts3KN0/img.png)
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력
13
예제 출력
3
풀이
이 문제는 벌집 안에 수들의 규칙을 파악해내야 합니다.
처음에 1이 있고, 육각형 모양으로 6개의 숫자들이 감싸고 있습니다.
또, 그 주변으로 12개의 숫자들이 감싸고 있네요.
벌집 모양으로 감싸져 있는 숫자들의 규칙을 보면
1 6 12 18 ...
바깥 숫자의 개수가 6의 배수로 늘어난다는 규칙이 있습니다.
1에서 N번 방까지 최소 개수의 방을 지날 때 몇 개의 방을 지나는지를 계산해야 되는데요.
예제에서 13이 주어졌을 때 출력이 3이 됩니다.
1 > 1번
1 + 6 = 7 > (주어진 숫자가 2~7이면) 2번
1 + 6 + 12 = 19 > (주어진 수가 8~19이면) 3번
정답 : 3
코드를 순서대로 작성한다면
1. A, B, C를 입력
2. B >= C 이면 -1 출력
3. A / (C - B) 의 노트북 개수에서 +1 해서 출력
작성 코드
N = int(input()) sum = 1 # 숫자 1부터 시작 room = 1 # 숫자 1은 1번 방부터 시작 if N == 1: # 숫자 1일땐 1출력 print(1) else: while True: # 정답이 나올때까지 반복 if N <= sum: # 6의 배수를 더한 값 안에 주어진 값이 있다면 방 수를 출력하고 탈출 print(room) break sum += (6 * room) # 1 + 6(6*1) + 12(6*2) + 18(6*3) ... room += 1 # 6의 배수가 될 때마다 방을 +1
728x90
320x100
'0년차 > 알고리즘(기본 수학)' 카테고리의 다른 글
[백준 2775번] 부녀회장이 될테야(파이썬) (2) | 2022.12.01 |
---|---|
[백준 10250번] ACM호텔(파이썬) (1) | 2022.12.01 |
[백준 2869번] 달팽이는 올라가고 싶다(파이썬) (0) | 2022.12.01 |
[백준 1193번] 분수찾기(파이썬) (0) | 2022.11.30 |
[백준 1712번] 손익분기점(파이썬) (0) | 2022.11.29 |
Comments