728x90
문제링크
https://www.acmicpc.net/problem/1789
문제
서로 다른 N개의 자연수의 합이 S라고 한다.
S를 알 때, 자연수 N의 최댓값은 얼마일까?
조건
시간제한 : 2초
메모리 제한 : 128 MB
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
문제정리
1. 서로 다른 N개의 자연수의 합은 S
2. N개의 최댓값을 구하자.
이번 문제의 경우 제일 많은 수를 더해 S값을 만들어내는 문제입니다.
즉 제일 작은 수 부터 차근차근 더해 나가여 S값을 만들면 N개의 최댓값을 구할 수 있습니다.
예제 문제에서 200이 나오려면 어떻게 해야하는지 만들어보겠습니다.
1부터 19까지 더하면 190이 되고 => N = 19
1부터 20까지 더하면 210이 됩니다. => N = 20
200을 만드려면 1부터 18까지 더하고 29를 한번더 더해줘야 합니다. => N = 19
즉 처음 S값을 초과한 N의 개수에서 1을 빼주면 되는 문제입니다.
아래의 코드를 살펴보면 쉽게 이해할 수 있을 것 같습니다.
C# 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
static void Main(string[] args)
{
StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
StreamReader reader = new StreamReader(Console.OpenStandardInput());
long S = long.Parse(reader.ReadLine());
long N = 0;
long index = 1;
long sum = 0;
while (true)
{
sum += index++; // 자연수 누적
N++;
if (sum > S) // 누적된 자연수의 값이 S보다 클때 까지 반복
break;
}
writer.WriteLine(N - 1);
writer.Close();
reader.Close();
}
|
cs |
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.
728x90
'[C#] 백준 (알고리즘) > 실버 문제' 카테고리의 다른 글
[백준 - C#] 1057번 토너먼트 (0) | 2022.09.01 |
---|---|
[백준 - C#] 1251번 단어 나누기 (2) | 2022.08.29 |
[백준 - C#] 1476번 날짜 계산 (0) | 2022.08.26 |
[백준 - C#] 1052번 물병 (0) | 2022.08.23 |
[백준 - C#] 1059번 좋은 구간 (0) | 2022.08.22 |