https://school.programmers.co.kr/learn/courses/30/lessons/12924
๐๏ธ ๋ฌธ์
๋ ๋ฒจ : 2
Finn์ ์์ฆ ์ํ๊ณต๋ถ์ ๋น ์ ธ ์์ต๋๋ค. ์ํ ๊ณต๋ถ๋ฅผ ํ๋ Finn์ ์์ฐ์ n์ ์ฐ์ํ ์์ฐ์๋ค๋ก ํํ ํ๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ๊ฐ๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ์๋ฅผ๋ค์ด 15๋ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง๋ก ํํ ํ ์ ์์ต๋๋ค.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
์์ฐ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ฐ์๋ ์์ฐ์๋ค๋ก n์ ํํํ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ returnํ๋ solution๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- n์ 10,000 ์ดํ์ ์์ฐ์ ์ ๋๋ค.
โ๏ธ ํ์ด
์ฐ์๋ ์์ฐ์๋ค์ ํฉ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ฐํ ํ ์ ์์ต๋๋ค. n์ ์์์ x๋ถํฐ x + m๊น์ง 1 ์ฆ๊ฐํ๋ ์ฐ์๋ ์์ ํฉ์ ์๋ฏธํ์ฃ .

์ฆ, ์ด ๋ฌธ์ ๋ ์ ์์์ n์ด ๋๋, x๊ฐ 0์ด ์๋, ์์ ์ ์ (x, m)์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ก ์นํ๋ ์ ์์ต๋๋ค.
- m์ 0์ ๊ฐ์ง ์ ์์ต๋๋ค. m = 0์ธ ์ํฉ์ ์ฐ์๋ ํํ์ด ์๊ธฐ์์ ์ผ ๋ ์ ๋๋ค. (์ : 15 = 15)
- x๋ 0์ด ๋ ์ ์์ต๋๋ค. n์ ์ฐ์๋ ์์ฐ์๋ค์ ํฉ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ 0๋ถํฐ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ ๊ฐ์ง ์ ๋ต ์ค ํ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- x์ 1๋ถํฐ ๊ฐ์ ๋์ ํด๋ณด๋ฉด์ m์ด ์์ ์ ์์ธ์ง ๊ฒ์ฌํ๊ธฐ
- m์ 0๋ถํฐ ๊ฐ์ ๋์ ํด๋ณด๋ฉด์ x๊ฐ ์์ฐ์์ธ์ง ๊ฒ์ฌํ๊ธฐ
์ ๋ m์ ๊ฐ์ ๋์
ํด๋ณด๋ฉด์ x๊ฐ ์์ฐ์์ธ์ง ๊ฒ์ฌํด๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฐ๋ก 2์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ ํ ์ ์๊ฒ ์ง๋ง, ์์ ๋ณด์ํ๋ ์ต์ ํ ํ ์ ์๋ ๋ถ๋ถ์ด ์์ต๋๋ค.
์ฐ์ ์์ ์์ ์๋์ ๊ฐ์ด ๋ณํํด๋ณด๊ฒ ์ต๋๋ค.

์ฌ๊ธฐ์ (1 + 2 + 3 + ... + m) ๋ถ๋ถ์ ๋ฑ์ฐจ์์ด ํฉ ๊ณต์์ผ๋ก ๋ณํํฉ๋๋ค.

๊ทธ๋ฆฌ๊ณ x์ ๋ํ ์์ผ๋ก ๋ฐ๊ฟ๋ด ์๋ค.

์ต์ข
์ ์ผ๋ก O(n)์ผ๋ก ์ด ์์ ์ด์ฉํด์ ๋ฌธ์ ์์ ์ฃผ์ด์ง n๊ณผ ํจ๊ป, m์ 0๋ถํฐ n๊น์ง ๋์
ํด๋ณด๋ฉด์ x๊ฐ ์์ฐ์๊ฐ ๋๋ฉด ์นด์ดํ
ํ๋ฉด ๋ฉ๋๋ค!๐คฃ
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for (double m = 0; m <= n; ++m) {
double x = (((double)n * 2) - (m * (m + 1))) / (2 * (m + 1));
if (x > 0 && x - (int) x == 0) answer++; // x๋ ์์ฐ์์ธ๊ฐ?
else if (x < 1) break; // x๊ฐ 1 ๋ฏธ๋ง์ด ๋๋ฉด ์งํํ ํ์์์
}
return answer;
}