2023. 2. 10. 23:35γπ Algorithm/π C++ λ¬Έμ νμ΄
μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νλ€λ³΄λ©΄ μ’ μ’ for λ¬Έ λμ 'λμ ν©'μ μ¬μ©ν΄μΌνλ λ¬Έμ κ° λμ¨λ€
λμ ν©μ΄λ?
- μμλ€μ΄ λμ λ ν©μΌλ‘, μ΄λ€ λ°°μ΄μ κΈ°λ°μΌλ‘ μμλ€μ λμ λ ν©μ μ μ₯ν΄ μλ‘ λ°°μ΄μ λ§λ€μ΄ μ΄λ₯Ό νμ©νλ λ°©λ²
- μμμ λνλ prefix sum (μ£Όλ‘ μ½λ©ν μ€νΈμμλ prefix sumλ§ λμ΄!!)
- λ€μμ λνλ suffix sum
prefix sum λ§λ€ λ μ£Όμν΄μΌ ν μ
- 0λ²μ§Έ μμλ λΉμλκ³ 1λ²μ§Έ μμλΆν° μ¬μ©νμ
psum[1] -> 0, 1
psum[2] -> 0,1,2
psum[3] -> 0, 1,2,3
psum[4] -> 0,1,2,3,4
λμ ν©μ μ½λλ‘ κ΅¬νν΄λ³΄μ!
for(int i = 1; i <= n; i++) {
cin >> a[i];
psum[i] = psum[i-1] + a[i];
}
for(int i = 0; i < m; i++) {
cin >> b >> c;
cout << psum[c] - psum[b-1] << '\n';
}
λ°±μ€ λμ ν© μ°μ΅ λ¬Έμ 2559. μμ΄
λμ ν© λ¬Έμ λ₯Ό for λ¬Έμ μ΄μ©ν΄μ νλ©΄?
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k, m;
cin >> n >> k;
string s;
vector<int> numbers;
for (int l = 0; l < n; l++) {
cin >> m;
numbers.push_back(m);
}
int max = -9999999;
for (int i = 0; i <= numbers.size() - k; i++) {
int sum = 0;
for (int j = i; j < i + k; j++) {
sum += numbers[j];
}
if (sum >= max) {
max = sum;
}
}
cout << max;
return 0;
}
N μ΄ 2 ~ 100,000 μ΄ν μ΄λ―λ‘, μμ μ½λλ‘ κ΅¬ννκ²λλ©΄ λΉ μ€κ° N^2 κ° λλλ°
10000000000 λ‘ μκ° μ΄κ³Όκ° λ°μνκ² λλ€
λμ ν©μ μ΄μ©ν΄μ νΌλ€λ©΄?
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k, m;
cin >> n >> k;
string s;
int num[100004];
int psum[100004];
for (int i = 1; i <= n; i++) {
cin >> num[i];
psum[i] = psum[i-1] + num[i];
}
int maximum[100004];
int largest = -1000000;
for (int i = k; i <= n; i++) {
largest = max(largest, psum[i]-psum[i-k]);
}
cout << largest << '\n';
return 0;
}
N λ³΄λ€ ν° λ°°μ΄ maximumμ λ§λ€μ΄ λκ³ ,
n λ§νΌ for λ¬Έμ λλ©°, 미리 μ μ₯ν΄λ Ό λμ ν©μ ν΅ν΄ μ°μλ μμ ν©μ ꡬνλ€
λΉ μ€ N μΌλ‘ μΆμλμ΄ μκ° μ΄κ³Όλ₯Ό ν΄κ²°ν μ μλ€!
λ°±μ€ λ λ§μ λμ ν© λ¬Έμ
'π Algorithm > π C++ λ¬Έμ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C++ λ°±μ€ 1620 _ λλμΌ ν¬μΌλͺ¬ λ§μ€ν° μ΄λ€μ λ¬Έμ νμ΄ (0) | 2023.02.10 |
---|---|
C++ String μκ³ λ¦¬μ¦μμ μμ£Ό μ°μ΄λ λ©μλ (0) | 2023.02.06 |
C++ μμ΄(permutation)κ³Ό μ‘°ν©(combination) (0) | 2023.02.01 |