백준(C언어) 풀이/기본 수학 1

백준(C) 2292번 벌집 풀이

개발윗미 2021. 7. 15. 16:24

C로 구현한 2292번 벌집 구하기 문제 풀이입니다.

 

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net


#include <stdio.h>

int main() {
    int input, min=2, diff=5, count=2;
    scanf("%d", &input);
    if(input == 1){
        printf("%d", input);
        return 0;
    }
    while(1){
        if(input>=min && input<=min+diff) {
            printf("%d", count);
            return 0;
        }
        min = min + diff + 1;
        diff += 6;
        count ++;
    }
}

 

개인적으로 머릿 속에서 굴리는게 불편해서 분석하기 편하게 메모장에 적었다.

방 이동의 최소 개수가 2인 것은 해당숫자가 2~7 이며, 차이가 5다.

 

방 이동의 최소 개수가 3인 것은 해당숫자가 8~19 이며, 차이가 11이다. 이러한 방식으로 메모장에 적었고,

 

코드를 보면 count의 초기값은 2로 잡았고 입력한 수가 최소값보다 크거나 같고 최대값보다 작거나 같으면 count를

 

출력한다. 예를 들어, 입력값이 4이라면 최소값인 2보다 크거나 같고 최대값인 7보다 작거나 같기때문에 count값을

 

바로 출력하면 된다. 

 

만약 조건에서 하나라도 만족하지 못한다면 건너뛰고 최소값과 차이값을 규칙에 따라 변경해주고 다시 반복한다.

 

예를 들어, 입력값이 13이라면 조건에 만족하지 못하기 때문에 최소값을 최대값+1, 차이값을 +6 누적하고 count를 1 

 

증가시킨 후 다시 반복하면 3이 출력될 수 있다.

 

 

[소감]

초반에는 머릿속으로만 규칙을 그려서 약간 버벅거렸는데 분석하기 편하게 메모장에 적어서 진행하니까

 

규칙을 찾아내고 문제를 금방 해결할 수 있었다.

'백준(C언어) 풀이 > 기본 수학 1' 카테고리의 다른 글

백준(C) 1712번 손익분기점 풀이  (0) 2021.07.15