λμκ΄
https://www.acmicpc.net/problem/1461
λ¬Έμ
μΈμ€μ΄λ λμκ΄μμ μΌνλ€. λμκ΄μ κ°λ°©μκ°μ΄ λλμ μΈμ€μ΄λ μ¬λλ€μ΄ λ§κ΅¬ λμ μ± μ λ€μ κ°μ Έλ€ λμμΌ νλ€. μΈμ€μ΄λ νμ¬ 0μ μκ³ , μ¬λλ€μ΄ λ§κ΅¬ λμ μ± λ μ λΆ 0μ μλ€. κ° μ± λ€μ μλ μμΉκ° μ£Όμ΄μ§ λ, μ± μ λͺ¨λ μ μ리μ λλ λ λλ μ΅μ κ±Έμ μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€. μΈμ€μ΄λ ν κ±Έμμ μ’ν 1μΉΈμ© κ°λ©°, μ± μ μλ μμΉλ μ μ μ’νμ΄λ€. μ± μ λͺ¨λ μ μ리μ λλ νμλ λ€μ 0μΌλ‘ λμμ¬ νμλ μλ€. κ·Έλ¦¬κ³ μΈμ€μ΄λ ν λ²μ μ΅λ MκΆμ μ± μ λ€ μ μλ€.
μ λ ₯
첫째 μ€μ μ± μ κ°μ Nκ³Ό, μΈμ€μ΄κ° ν λ²μ λ€ μ μλ μ± μ κ°μ Mμ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ μ± μ μμΉκ° μ£Όμ΄μ§λ€. Nμ 10,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄κ³ , Mμ 10,000λ³΄λ€ μκ±°λ κ°λ€. μ± μ μμΉλ 0μ΄ μλλ©°, κ·Έ μ λκ°μ΄ 10,000λ³΄λ€ μκ±°λ κ°λ€.
μΆλ ₯
첫째 μ€μ μ λ΅μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
7 2
-37 2 -6 -39 -29 11 -28
μμ μΆλ ₯ 1
131
λμ λ΅
μκ°μ νλ¦
μ 체 μ μ λ ¬ => μμμ μμμ μ λκ° λΉκ΅ (μμΌλ©΄ μλμΌλ‘ μ ν΄μ§) => ν° μͺ½μΌλ‘ λμ€μ => μμ μͺ½ λ¨Όμ ν° μλΆν° Mκ°μ© λκ³ , ν΄λΉ index κ³±νκΈ° 2 => ν° μͺ½μ μ λκ°μ΄ ν° μλΆν° Mκ°μ© λκ³ , ν΄λΉ index κ³±νκΈ° 2 (κ°μ₯ ν° μ λκ°μ κ³±νκΈ° 1)
μ½λ
<ꡬν μ λμΆ© μ§κΈ°>
sort(arr)
arr1 = μμ λ°°μ΄ (absν΄μ sort)
arr2 = μμ λ°°μ΄
sum = 0
if(abs(arr1[size-1])<arr2[size-1]): // μμ λ¨Όμ
gothere(0, size);
flag = 1
gothere(0, size)
gothere(start,end):
end-1 ~ startκΉμ§ Mκ°μ© λμ΄μ index μ μ₯ => idx_list
sum+=idx_listμμ*2
if(flagκ° 1)
sum-=idx_list λ§μ§λ§ μμ
<ꡬν>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N, M;
int booklist[10000];
int positive[10000];
int negative[10000];
int flag = 0;
int sum = 0;
enum {POS,NEG};
void gothere(int start, int end, int kind) {
int* which;
if (kind == POS)
which = positive;
else
which = negative;
vector<int> idx_list;
int idx = end - 1;
while (idx >= 0) {
idx_list.push_back(which[idx]);
idx -= M;
}
for (int i = 0; i < idx_list.size(); i++)
sum += idx_list[i] * 2;
if (flag == 1) // λ§μ§λ§ μμ ν λ² λΉΌκΈ°
sum -= idx_list[0];
}
int main() {
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> booklist[i];
}
sort(&booklist[0], &booklist[N]);
// μμ μμ λ°°μ΄ λλμ΄ λ΄κΈ°
int tmp = 0;
int n_size = 0;
while (booklist[tmp] < 0) {
negative[n_size++] = abs(booklist[tmp++]);
}
int p_size = 0;
while (tmp < N) {
positive[p_size++] = booklist[tmp++];
}
sort(&negative[0], &negative[n_size]);
if (positive[p_size - 1] < negative[n_size - 1]) { // μ λκ° λΉκ΅
gothere(0, p_size, POS); // μμ κ±° λ¨Όμ
flag = 1;
gothere(0, n_size, NEG);
}
else {
gothere(0, n_size, NEG); // μμ κ±° λ¨Όμ
flag = 1;
gothere(0, p_size, POS);
}
cout << sum;
}
ν μ€νΈ μΌμ΄μ€
8 2
-10000 -3 -2 -1 2 100 1000 1001
=> 12206
8 3
-10000 -3 -2 -1 2 100 1000 1001
=> 12008
λ€λ₯Έ λ΅
- λ³ΈμΈμ booklistλ‘ λ°κ³ λ λ°°μ΄λ‘ λλ΄μΌλ λ°μΌλ©΄μ λ°λ‘ μμ μμ 쑰건κ²μ¬ν΄μ negative, positive λ°°μ΄λ‘ λλ΄μ΄λ λλ€.
'Algorithm λ¬Έμ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[c++] BOJ 1107λ² :: 리λͺ¨μ»¨ (μ½λ, ν μ€νΈμΌμ΄μ€) (0) | 2020.05.02 |
---|---|
[c++] BOJ 1309λ² :: λλ¬Όμ (0) | 2020.04.25 |
[c++] BOJ 9251λ² :: LCS (νμ΄ λ° μ€λͺ + λ λμ μ½λ) (0) | 2020.04.18 |
[c++] BOJ 1149λ² :: RGB거리 (0) | 2020.04.16 |
[c++] BOJ 1417λ² :: κ΅νμμ μ κ±° (0) | 2020.04.10 |
Comment