[C언어 코드업 문제풀이] CodeUp 1087 : [기초-종합] 여기까지! 이제 그만~(설명)

코드업 1087번 여기까지! 이제 그만~ 문제 풀이 해답입니다.

 

1. 문제 설명

 

1, 2, 3 ... 을 순서대로 계속 더해나갈 때,
그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 계속 더한다고 할 때,
어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.

하지만, 이번에는 그 때의 합을 출력해야 한다.

예를 들어 57을 입력하면
1+2+3+...+8+9+10=55에 다시 11을 더해 66이 될 때,
그 값 66이 출력되어야 한다.


참고
조건문이나 반복문의 코드블록 안에서 break;가 실행되면
가장 가까운 반복 코드블록 구역의 밖으로 빠져나간다.


예시
int n, i, s=0;
scanf("%d", &n);
for(i=1; ; i++) //for 반목문에서 가운데의 조건이 빠진 경우 무한 반복된다.
{
  s+=i;
  if(s>=n)
    break; //참이면, 가장 가까운 반복 코드블록의 밖으로 빠져나간다.
} //break; 가 실행되면 반복을 중단하고 여기로 빠져 나온다.
printf("%d", s);

무한 반복이 되는 코드는
while(1) {...}, do {...}while(1); 등도 가능하다.
0이 아니면 모두 참(true)으로 인식되기 때문이다. 

 

2. 입력

 

언제까지 합을 계산할 지, 정수 1개를 입력받는다.
단, 입력되는 자연수는 100,000,000이하이다. 

 

3. 출력

 

1, 2, 3, 4, 5 ... 순서대로 계속 더해가다가, 그 합이 입력된 정수보다 커지거나 같아지는 경우,
그때까지의 합을 출력한다. 

 

4. 입력 예시

 

57

 

5. 출력 예시

 

66

 

6. 문제 풀이

 

#include<stdio.h>
 
int main(){
    
    int i,sum;
    scanf("%d",&i);
    
    for(int j = 1; j <=i; j++){
        sum += j;
        if(sum >= i){
            printf("%d",sum);
            break;
        }
        
    }
    
    
    return 0;
}

 

for문을 이용하여 코드를 작성했습니다.

for(int j = 1; j <=i; j++){} 문은 입력받은 i( scanf("%d",&i); ) 까지 반복적으로 j를 증가시킵니다.

 

그 j 값들을 sum += j; 을 통해서 합해줍니다. sum += j;는 sum = sum + j 와 같습니다.

이 때 if(sum >= i) 즉 합이 입력 값 i보다 크거나 같을 때  break;을 이용해서 반복문을 종료해줍니다.

댓글()