<문제>
1, 2, 3... 을 계속 더해 나갈 때,
그 합이 입력한 정수(0 ~ 1000) 보다 같거나 작을 때까지
계속 더하는 프로그램을 작성해보는 문제이다.
즉, 1부터 n까지 정수를 계속 더한다고 할 때,
어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.
입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다.
처음으로 접근한 풀이방식인데, 풀다가 아닌 것 같음을 알아차리고 2번 코드 블록 방식의 풀이로 접근을 하였다. 1번 코드 블록 같이 작성을 하면 출력 값을 확인하려면 상당히 오래 키보드를 눌러야 할 것 같다.
printf의 끝을 알리는 ; 옆에 break문이라도 있으면, 조금 더 편하겠지만 마찬가지로 오답이다.
break가 있을 경우에는 어떤 정수를 입력하든 1이 나오는 것을 볼 수있다.<틀린 풀이>
#include<stdio.h>
int main(void)
{
int a;
int i,sum = 0;
for (i = 1; i <= 1000; i++)
{
sum += i;
scanf("%d", &a);
if (sum <= a)
printf("%d", i);
}
return 0;
}
두 번째로 접근한 방식인데, 이 코드는 for문의 순서? 흐름?을 능숙하게 파악할 수 있었다면 이렇게 코드를 작성하지는 않았을 것 같다. a= 1이라 해도 i =3이 되어버린다. 55 = a라면 10의 출력 결과를 기대해야 하는데, 12가 나온다.
즉 오답이다.
#include<stdio.h>
int main(void)
{
int a;
int i = 1;
int sum = 0;
scanf("%d", &a);
for (i = 1; sum <= a; i++)
sum += i;
printf("%d", i);
return 0;
}
정답이라고 나온 풀이이고, 문제에 나온 조건들을 적용하는데에는 문제가 없지만, 뭔가 나 스스로 마음이 들지 않는 풀이 방식이었다.
#include<stdio.h>
int main(void)
{
int a;
int i = 0;
int sum = 1;
scanf("%d", &a);
for (i = 0; sum <= a; i++)
sum += i;
printf("%d", --i);
return 0;
}
내가 생각했을 때 이상적인 풀이인 것 같다. for문의 조건식 자리들은 조건이 없으면 적어주지 않아도 된다.
#include<stdio.h>
int main(void)
{
int a;
int i = 1;
int sum = 0;
scanf("%d", &a);
for (i = 1; ; i++) {
sum += i;
if (sum >= a) break;
}
printf("%d", i);
return 0;
}