본문 바로가기
백준 문제 풀이 & C++ 공부

백준 2292번 C/C++

by daisy0461 2021. 2. 12.

오늘은 설날입니다. 설 같은 명절에도 코딩으로 시작해야 한 해 동안 노력을 할 수 있겠죠..?

www.acmicpc.net/problem/2292

[

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

](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