백준 2292번: 벌집 - c언어

Yeonsu Summer·2022년 7월 15일
0

알고리즘

목록 보기
3/24
post-thumbnail

문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

예시

13 > 3


나의 생각

입력값방의 개수
116*0 + 1
2~721+6 = 6*0 + 6*1 = 6*(0+1) + 1
8~1931+6+12 = 6*0 + 6*1 + 6*2 = 6*(0+1+2) + 1
20~3741+6+12+18
38~6151+6+12+18+24

순열
f(n) = 6 n + f(n-1)
f(n-1) = 6
(n-1) + f(n-2)
...
f(0) = 1

조건
f(i) < N <= f(i+1)
result = i+1;


f(0) < 4 =< f(1)
n = 1;



첫 번째로 제출한 답

#include <stdio.h>

int bee(int num) {
    if (num == 1) {
        return 1;
    } else {
        return (6 * (num - 1) + bee(num - 1));
    }
}

int main() {
    int N, i;
    
    scanf("%d", &N);
    
    for (i = 1; ; i++) {
        bee(i);
        bee(i + 1);
        
        if (bee(i) < N <= bee(i + 1)) {
            printf("%d", i + 1);
            break;
        }
    }
    
    return 0;
}

결과는 틀렸습니다.

A < B < C (X)
A < B && B < C (X)
아주 기본적인 문법 실수를 했다...

두 번째로 제출한 답

#include <stdio.h>

int bee(int num) {
    if (num == 1) {
        return 1;
    } else {
        return (6 * (num - 1) + bee(num - 1));
    }
}

int main() {
    int N, i;
    
    scanf("%d", &N);
    
    for (i = 1; ; i++) {
        bee(i);
        bee(i + 1);
        
        if (bee(i) < N && N<= bee(i + 1)) {
            printf("%d", i + 1);
            break;
        }
    }
    
    return 0;
}

결과는 틀렸습니다

입력한 값이 1인 경우를 생각하지 못했다.
저 코드에 1을 입력한다면 출력값이 나오지 않는다.

최종으로 제출한 답

#include <stdio.h>

int bee(int num) {
    if (num == 1) {
        return 1;
    } else {
        return (6 * (num - 1) + bee(num - 1));
    }
}

int main() {
    int N, i;
    
    scanf("%d", &N);
    
    for (i = 1; ; i++) {
        bee(i);
        bee(i + 1);
        
        if (bee(i) < N && N <= bee(i + 1)) {
            printf("%d", i + 1);
            break;
        } else if (bee(i) == N) {
            printf("%d", i);
            break;
        }
    }
    
    return 0;
}

결과는 맞았습니다!

profile
🍀 an evenful day, life, journey

0개의 댓글