오늘은 설날입니다. 설 같은 명절에도 코딩으로 시작해야 한 해 동안 노력을 할 수 있겠죠..?
[
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
](https://www.acmicpc.net/problem/2292)
이번에 걸린 문제는 매우 쉬운 문제였습니다. 규칙만 찾는다면 누구나 쉽게 풀 수 있는 문제였습니다.
굳이 이런 문제를 찾지는 않으실 것 같지만 일단 규칙 먼저 말씀드리겠습니다.
문제에 있는 그림이 매우 복잡해보여서 풀기 싫어보기지만 규칙성을 찾으면 코딩은 매우 간단해집니다.
결국 최소 거리를 구하는 것이기 때문에 제 접근법은
해당칸의 가장 큰것 보다 크고 다음 칸에 해당하는 가장 큰것보다 작으면 그 범위 내에 있는 숫자는 모두 동일합니다.
이러한 규칙으로 살펴보면 1 - 7 - 19 - 37 ~ 처럼 됩니다. 즉 6, 12, 18 6의 배수처럼 늘어나는 점 또한 알 수 있습니다.
코딩은 아래와 같이 됩니다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
int main()
{
int n;
scanf("%d", &n); //n을 받음.
int i = 1;
n = n - 1; //1을 계산하기 쉽게 제외시킴.
//그렇기에 printf의 출력은 최소 1로 설정해야함.
while (n > 0) {
n = n - (i * 6);
i++;
}
printf("%d", i);
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 10989 C/C++ (0) | 2021.02.16 |
---|---|
백준 2751번 C/C++ (0) | 2021.02.15 |
백준 2231번 C/C++ (0) | 2021.02.08 |
백준 2614번 C/C++ (0) | 2021.02.08 |
백준 10163번 C/C++ (0) | 2020.09.06 |