일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Airflow
- Spark
- airflow architecture
- 프로그래머스
- datacamp
- docker
- 2023년 목표
- Dynamic Programming
- 백준온라인저지
- hackerrank
- BOT
- Python
- 데이터 엔지니어
- docker container
- 백준 온라인 저지
- docker image
- terraform
- delete join
- SQL
- airflow webserver
- 알고리즘
- MySQL
- 그리디
- telegram
- Data Engineering
- Pseudo Lab
- dsf
- data_engineer
- leetcode
- 빅데이터를 지탱하는 기술
Archives
- Today
- Total
Lim Seunghyun Space
[백준 온라인 저지] 벌집 본문
문제 출처
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
문제 해설
- 각 방을 숫자로 주소를 매긴 육각형 형태의 벌집이 있다.
- 각 방의 1부터 시작해 시계 방향으로 하나씩 증가하여 주소를 매겼다.
- 1번 방부터 입력한 N번 방까지 최소 몇 개의 방을 지나치는지 계산하는 문제이다.
- 1번 방 주위로 2번 방부터 7번 방까지 6개로 둘러싸여 있다.
- 8번 방부터 19번 방까지 12개로 둘러싸여 있다.
- 20번 방부터 37번 방까지 18개로 둘러싸여 있다.
- 위의 규칙을 이용하여 정리하면
- 2번 방부터 7번 방까지 중심인 1번 방으로부터의 거리를 1이라고 하자.
- 8번 방부터 19번 방까지는 거리가 2이다.
- 거리 1은 6개
- 거리 2는 12개
- 거리 3은 18개
- 거리 n은 6 * n개가 될 것이다.
- 거리가 중요한 이유는 각 방은 붙어있기 때문에 최소 지나가는 방의 개수가 깊이가 되기 때문이다.
- 예를 들어, 입력한 값이 64면 1 > 2 > 9 > 22 > 40 > 64로 6개 방을 지나치는 것이 최소한으로 이동한 것이 될 것이며 64번 방은 1번 방부터 거리가 6이다.
나의 풀이
# source: https://www.acmicpc.net/problem/2292
import sys
n = int(input())
pass_cnt = 1
start_num = 1
end_num = 1
while True:
num_range = range(start_num, end_num + 1)
if n in num_range:
break
else:
start_num = start_num + 1
end_num = end_num + (pass_cnt * 6)
pass_cnt += 1
print(pass_cnt)
- 위에서 이용한 거리라는 개념을 이용하여 거리를 하나씩 증가시켜 속한 방 번호의 범위를 계산하여 문제를 해결하였다.
Git 주소
728x90
'Algorithm > 문제' 카테고리의 다른 글
[Leetcode] Reverse Integer (0) | 2022.11.21 |
---|---|
[백준 온라인 저지] 균형잡힌 세상 (0) | 2022.11.19 |
[백준 온라인 저지] 손익분기점 (2) | 2022.11.13 |
[Leetcode] 4. Median of Two Sorted Arrays (0) | 2022.06.10 |
[Leetcode] 3. Longest Substring Without Repeating Characters (0) | 2022.06.09 |