https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
1. 문제 풀이 아이디어
: 순서대로 수를 더하되, 더한 합이 입력 값으로 줬던 S보다 크면 cnt를 뻬준다.
유연하게 생각하자. 마지막 값은 입력된 값에 맞춰지도록 설계되면 된다. 갯수를 세려고 하는 것이니 자연수의 합 S에만 집중할 게 아니다!
2. 풀이 코드(C++)
#include <iostream>
using namespace std;
void max(unsigned long sum) {
unsigned long cnt = 1;
unsigned long tmp = 0;
while (true) {
if (sum > tmp + cnt) {
tmp += cnt;
cnt++;
}
else if (sum == tmp + cnt) {
cout << cnt;
break;
}
else { // sum < tmp + cnt 인 경우
cout << cnt - 1;
break;
}
}
}
int main(void) {
unsigned long sum;
cin >> sum;
max(sum);
return 0;
}'알고리즘 > C++ 풀이 기록' 카테고리의 다른 글
| 백준 - 1181 단어 정렬 (0) | 2021.09.11 |
|---|---|
| 백준 - 1026 보물 (0) | 2021.09.10 |
| 백준 - 1316 그룹 단어 체커 (0) | 2021.09.09 |
| 백준 - 22993 서든어택 3 (0) | 2021.09.07 |
| 백준 - 1158 요세푸스 문제 (0) | 2021.09.06 |