728x90
반응형
문제:
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 5개, 58까지는 5개를 지난다.
입력:
첫째 줄에 N(1<=N<=1,000,000,000)이 주어진다.
출력:
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
풀이 방법:
가운데 1에서부터 시작했을 때 1을 둘러싸고 있는 벌집의 방 갯수는 6이고, 이를 1층이라고 부르자.
그렇다면 이 1층을 둘러싸고 있는 벌집의 방 개수를 세어보면 12이고 이를 2층이라 할 수 있다.
계속 세어나가다 보면 3층의 갯수는 18개, 4층의 갯수는 24개...이렇게 증가함을 알 수 있다.
즉, 이 문제는 N이 몇 층에 속해있는지 파악하면 그 층이 최소 개수의 방의 수이다. while문을 사용해서 m이 n을 넘어갈 때까지 반복시키고 그 때마다 count를 세어서 count를 최종 반환하도록 한다.
1 2 3 4 5 6 7 8 9 10 11 | def bee(n): m = 1 k = 1 count = 1 while n > m: count+=1 m = m+6*k k+= 1 return count n=int(input()) print(bee(n)) | cs |
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[BOJ]2775. 부녀회장이 될테야 (0) | 2019.04.09 |
---|---|
[BOJ]10250. ACM 호텔 (0) | 2019.04.08 |
[BOJ]2941. 크로아티아 알파벳 (0) | 2019.04.06 |
[BOJ]1157. 단어 공부 (0) | 2019.04.05 |
[BOJ]1152. 단어의 개수 (0) | 2019.04.04 |