2023년 2월 21일에 작성됨
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
문제 분석
N개의 자연수 합이 최댓값이 되려면 1부터 2, 3, 4...까지 차례대로 더해준다.
1부터 n까지 더한 누적합이 s보다 커지게 되면, 커지기 직전의 가장 마지막에 더해준 자연수가 최댓값이 된다.
예를 들어 s=20이면,
1+2+3+4+5+6=21>20(커짐),
1+2+3+4+5=15<20(커지기 전) -> 최댓값은 5가 된다.
소스 코드 (⭕)
#include <stdio.h>
int main()
{
long long int S;
long long int i = 1, sum = 0;
scanf("%d", &S);
while (1)
{
sum += i;
if (sum > S)
{
printf("%d\n", i - 1);
return 0;
}
i++;
}
}
코드 분석
1. S를 입력받고, sum과 i의 초깃값을 각각 0과 1로 설정해준다.
2. 무한 반복문으로 sum에 i를 더해주고, 만약 sum이 S보다 커지게 되면, 커지기 전의 값 i-1을 출력하고 프로그램을 종료한다. 아니라면 i++을 해준다.
end
파이썬으로도 풀었던 문제인데 같은 문제라서 다른 언어로 풀어도 구조가 거의 비슷하다. 확실하게 문제를 이해했으면 굳이 다른 언어로 여러번 풀 필요는 없을 것 같다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준_2446 : 별 찍기 - 9 (0) | 2023.12.23 |
---|---|
[C]백준_2445 : 별 찍기 - 8 (0) | 2023.12.22 |
[C]백준_2444 : 별 찍기 - 7 (0) | 2023.12.20 |
[C]백준_1264 : 모음의 개수 (2) | 2023.12.20 |
[C]백준_2798 : 블랙잭 (0) | 2023.12.19 |