일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 별 생성
- Github
- Estimator
- 파이썬 머신러닝 완벽가이드
- 그리드서치
- 시계열
- 교차검증
- GridSearchCV
- 패턴찾기
- 문자열반복
- LSTM
- GRU
- lm
- map() 객체
- 벌집
- 중앙이동알고리즘
- softmax
- Bidirectional
- multihead attention
- rnn
- 파이썬 머신러닝 완벽 가이드
- nlp
- 2차원배열
- 백준
- K-Fold
- positional encoding
- git
- 태블로
- 진법변환
- QGIS #시각화 #SW
- Today
- Total
데이터분석가 | 취준생
[백준] 2292 벌집 본문
백준의 해당 문제는 링크를 통해 들어가서 풀어볼 수 있다.
https://www.acmicpc.net/problem/2292
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
정답
n = int(input())
room = 1 # 현재 방 개수
layer = 1 # 층수
while n > room:
room += 6*layer
layer += 1
print(layer)
공부한 내용
이 문제도 앞서 풀었던 중앙 이동 알고리즘 문제와 같이 패턴을 찾아야 하는 문제였다. 문제에서 그림과 같이 육각형 도형에서 1이 중심이라고 생각했을 때, 1과 바로 인접해 있는 6개의 숫자들과 그 다음 인접해 있는 6개의 숫자들 ... 간의 규칙을 찾아야 했다.
벌집은 이렇게 구성됩니다:
- 1층 : 1개 (1번 방)
- 2층 : 1 + 6 = 7번까지
- 3층 : 1 + 6 + 12 = 19번까지
- 4층 : 1 + 6 + 12 + 18 = 37번까지
여기서 규칙은 2층에서 6을 더하고, 3층에서는 12를 더하고, 4층에서는 18을 더하고 ..
발견했나요 ?
바로 6의 배수가 계속 더해지면서 층별 구성되어지는 방들의 숫자가 일정하게 증가하고 있었다.
따라서, 위의 코드와 같이 "현재 방"과 "층수"를 각각 1로 설정한 뒤, while 반복문을 사용해서 입력되어지는 방의 숫자, n이 현재위치인 1보다 크다면, room은 그 다음 층의 최대 방의 숫자인 7로 넘어가게 되는 동시에 층 수도 1이 증가하여 2가 된다. 여기서 또 n이 현재 방인 7보다 크다면, 다음 층에 있는 방이니까 room과 layer의 변수의 값이 반복해서 증가하게 된다.
'백준' 카테고리의 다른 글
[백준] 2903. 중앙 이동 알고리즘 (0) | 2025.06.10 |
---|---|
[백준] 11005 진법변환2 (0) | 2025.06.07 |
[백준] 2745 진법 변환 (0) | 2025.06.07 |
[백준] 2563번 색종이 (0) | 2025.06.06 |
[백준] 1316 그룹단어 체커 (1) | 2025.06.02 |