📝 문제
>
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
https://www.acmicpc.net/problem/2292
- 저 색칠한 친구들끼리는 같은 칸 수다.
이에 따르면,
1 : 1개
2 ~ 7 (6개) : 2개
8 ~ 19 (12개) : 3개
20 ~ 37 (18개) : 4개
...
이런 식으로 6개씩 늘어남! 식을 뽑아내면 대충,, 6 * i 를 점점 더해주는 느낌!
🎨 풀이
💡 성공 코드
n = int(input())
i = 0
cnt = 1
total = 1
while(True):
total += (6 * i)
if total >= n :
break
else :
i += 1
cnt += 1
print(cnt)
> 핵심 : 공식 찾아내기!
# main
1. n 값을 입력받는다.
2. i = 0, cnt = 1, total = 1 값으로 초기화해준다.
- 출발점이 1이기 때문에 그에 맞춰서 값을 설정한 것이다.
3. while문 무한 반복문을 돌린다.
4. total에 6*i를 더해준다. (앞으로 계속 더해줄 예정)
5. 만약 total보다 n이 크다면, 이미 그 칸수를 넘었다는 뜻이기 때문에 break를 해준다.
- ex) n = 2 라고 할 때, total은 그대로 1이라서, else에 있는 i += 1, cnt += 1을 해준다.
그 이후 if문 다시 만났을 때는 total이 이미 7이라서 딱 2 ~ 7 라인에 걸리니까 바로 break 해주면 된다.
- 숫자가 커지더라도 6 * i 를 total에 더해주면서 비교해주면 된다.
6. cnt 값을 출력해준다.
끝~
⭐ 느낀점
> 잘 풀었다. ㅎㅎ. 예전에 푼 게 어렴풋이 기억이 나서 그런 지 더 잘 풀렸던 것 같다. 도움이 되어 다행이다 휴~
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 2839번 - 설탕 배달 (파이썬) (0) | 2022.06.25 |
---|---|
[백준] 10757번 - 큰 수 A+B (파이썬) (0) | 2022.06.24 |
[백준] 1712번 - 손익분기점 (파이썬) (0) | 2022.06.22 |
[백준] 1316번 - 그룹 단어 체커 (파이썬) (0) | 2022.06.21 |
[백준] 2941번 - 크로아티아 알파벳 (파이썬) (0) | 2022.06.20 |