728x90
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
풀이
한 층 바깥의 벌집으로 나갈 때마다 6*층의 수만큼 값이 증가한다!
시작 단계인 1층은 1개, 2~7까지인 2층은 6개의 방이 존재하고, 8~19까지인 3층은 12개의 방이 존재한다.
이후 같은 규칙이 반복된다.
1: 1
2~7 (6) : 2
8~19 (12) : 3
20~37 (18) : 4
38~61 (24) : 5
방 번호를 받은 뒤 방 번호보다 각 층의 마지막 값이 클 경우까지 계산하는 반복문을 돌린다.
예를 들어 13을 받을 경우,
첫 번째 반복문에서 각 층의 마지막 값(cal)이 기본인 1에서 7로 증가하고 결과값은 2로 증가한다. 아직 n보다 작으니 한 바퀴 더 돌린다.
두 번째 반복문에서 cal은 7+ (6 * 2) = 19가 되고, 결과값은 3이 된다.
그리고 n보다 cal이 커졌기 때문에 반복문은 break된다.
n = int(input())
cal,res = 1,1
while n>cal:
cal+=(6*res)
res+=1
print(res)
'PS > Python' 카테고리의 다른 글
[스택][BOJ / Python] 10773 - 제로 (0) | 2020.10.21 |
---|---|
[수학][BOJ / Python] 2775 - 부녀회장이 될테야 (2) | 2020.10.21 |
[수학][BOJ / Python] 1712 - 손익분기점 (0) | 2020.10.08 |
[문자열][BOJ / Python] 2941 - 크로아티아 알파벳 (0) | 2020.10.05 |
[문자열][BOJ / Python] 1316 - 그룹 단어 체커 (0) | 2020.10.05 |
최근댓글