본문 바로가기

백준

2292 벌집

어렵고...

난해하다...

 

그래도 나름의 규칙성을 찾아 풀었다. 

찾은 규칙을 그대로 코드로 옮겼다. 수학 잘하는 사람은 더 잘 짤 것 같은데 나는 이게 최선인 것 같다. 

 

 

#include <iostream>

int main() {
    int n;
    scanf("%d", &n);
    
    if(n == 1){
        printf("1");
        return 0;
    }
    
    int max = 1, min = -4;
    if(min <= n - 6 && n - 6 <= max){
        printf("2");
        return 0;
    }
    
    for(int i = 1; ; i++){
        max += 6*i;
        min += 6*(i-1);
        if(min <= (n - 6*(i+1)) && (n - 6*(i+1)) <= max){
            printf("%d", i+2);
            break;
        }
    }
    
    return 0;
}

처음에 1 출력하고 종료 안 해서 틀렸다. 앞으로 이 부분을 더 신경써야겠다. 계속 return 0 써줘서 지저분해 보이는데 다른 방법이 없을까.. 어엄... 

 


 

더 깔끔한 방법이 있었다 이해하기 힘들긴 한데 어떻게 돌아가는지 알겠다

 

 

#include <iostream>

int main()
{
    int n, max = 1, i = 1;
    scanf("%d", &n);

    for (; max < n; i++)
        max += i * 6;

    printf("%d\n", i);
    return 0;
}

 

와.. 깔끔하다.. 

 

'백준' 카테고리의 다른 글

2902 KMP는 왜 KMP일까?  (0) 2019.10.08
2309 일곱 난쟁이  (0) 2019.10.08
2920 음계  (0) 2019.10.06
11720 숫자의 합  (0) 2019.10.06
1924 2007년  (0) 2019.10.06