알고리즘/C++ 풀이 기록

백준 - 1789 수들의 합

swanim 2021. 9. 6. 15:13

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