본문 바로가기

Coding Tests/코드업

코드업 1080번

<문제>

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;
}