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;
}