어렵고...
난해하다...
그래도 나름의 규칙성을 찾아 풀었다.
찾은 규칙을 그대로 코드로 옮겼다. 수학 잘하는 사람은 더 잘 짤 것 같은데 나는 이게 최선인 것 같다.
#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 |