SMALL
https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
- 문제
- 문제풀이
이 그림을 보았을 때 가운데 방은 1이고 두번째 칸은 1~7, 세번째 칸은 8~19 이런식으로 방번호가 배정된다.
N번째 칸 | 방의 번호 | 해당수의 차이 |
1번째 칸 | 1 | |
2번째 칸 | 2~7 | 5 |
3번째 칸 | 8~19 | 11 |
4번째 칸 | 20~37 | 17 |
5번째 칸 | 38~61 | 23 |
해당수의 차이를 보면 6씩 차이가 나는 규칙을 찾을 수 있다.
1, 1+6*1, 1+6*2...과 같은 식을 만들 수 있다. 층을 높혀가면서 입력한 수와 칸에서 가장 높은 수를 비교하여
답을 찾을 수 있다.
- 코드 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
int N;
scanf("%d", &N);
int roomnum = 1;
int layer = 0;
while (1) {
if (N <= roomnum) break;
layer++;
roomnum += 6 * layer;
}
printf("%d", layer + 1);
}
- 후기
규칙은 빠르게 발견했다고 생각했는데 코드로 구현하려고 하니 너무 힘들었다. 고등학교때 무슨 수열이라고 배웠던 것 같은데 무엇인지 기억이 안난다...
LIST
'백준 > C언어' 카테고리의 다른 글
[C언어]백준 2563: 색종이 (0) | 2023.01.28 |
---|---|
[C언어]백준 2566번: 최댓값 (0) | 2023.01.28 |
[C언어]백준 1712번: 손익분기점 (0) | 2023.01.13 |
[C언어]백준 2525: 오븐시계 (0) | 2023.01.05 |
[C언어]백준 1193번: 분수찾기 (0) | 2023.01.05 |