<문제>
출처 : https://www.acmicpc.net/problem/2292
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
<입력>
첫째줄에 N(1<=1<= 1,000,000,000)이 주어진다.
<출력>
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def rule(N): if N == 1: return 1 num = 1 start = 2 while True: if start+(6*num)-1 >= N: return num+1 start += (6*num) num += 1 if __name__ == '__main__': N = int(input()) result = rule(N) print(result) | cs |
2019/02/07 - [Study/Algorithm] - 백준 #1003 - 피보나치 함수 c++
'Programming > Algorithm' 카테고리의 다른 글
백준 #4344 - 평균은 넘겠지 python (0) | 2019.02.12 |
---|---|
백준 #1152 - 단어의 개수 python (0) | 2019.02.12 |
백준 #2775 - 부녀회장이 될테야 python (0) | 2019.02.08 |
백준 #1003 - 피보나치 함수 c++ (0) | 2019.02.07 |
백준 #9461 - 파도반수열 python (0) | 2019.02.07 |