[λ°±μ€/C++] 11399λ²: ATM
λ¬Έμ
μΈνμνμλ ATMμ΄ 1λλ°μ μλ€. μ§κΈ μ΄ ATMμμ Nλͺ μ μ¬λλ€μ΄ μ€μ μμλ€. μ¬λμ 1λ²λΆν° Nλ²κΉμ§ λ²νΈκ° λ§€κ²¨μ Έ μμΌλ©°, iλ² μ¬λμ΄ λμ μΈμΆνλλ° κ±Έλ¦¬λ μκ°μ PiλΆμ΄λ€.
μ¬λλ€μ΄ μ€μ μλ μμμ λ°λΌμ, λμ μΈμΆνλλ° νμν μκ°μ ν©μ΄ λ¬λΌμ§κ² λλ€. μλ₯Ό λ€μ΄, μ΄ 5λͺ μ΄ μκ³ , P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 μΈ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ. [1, 2, 3, 4, 5] μμλ‘ μ€μ μ λ€λ©΄, 1λ² μ¬λμ 3λΆλ§μ λμ λ½μ μ μλ€. 2λ² μ¬λμ 1λ² μ¬λμ΄ λμ λ½μ λ κΉμ§ κΈ°λ€λ €μΌ νκΈ° λλ¬Έμ, 3+1 = 4λΆμ΄ κ±Έλ¦¬κ² λλ€. 3λ² μ¬λμ 1λ², 2λ² μ¬λμ΄ λμ λ½μ λκΉμ§ κΈ°λ€λ €μΌ νκΈ° λλ¬Έμ, μ΄ 3+1+4 = 8λΆμ΄ νμνκ² λλ€. 4λ² μ¬λμ 3+1+4+3 = 11λΆ, 5λ² μ¬λμ 3+1+4+3+2 = 13λΆμ΄ κ±Έλ¦¬κ² λλ€. μ΄ κ²½μ°μ κ° μ¬λμ΄ λμ μΈμΆνλλ° νμν μκ°μ ν©μ 3+4+8+11+13 = 39λΆμ΄ λλ€.
μ€μ [2, 5, 1, 4, 3] μμλ‘ μ€μ μλ©΄, 2λ² μ¬λμ 1λΆλ§μ, 5λ² μ¬λμ 1+2 = 3λΆ, 1λ² μ¬λμ 1+2+3 = 6λΆ, 4λ² μ¬λμ 1+2+3+3 = 9λΆ, 3λ² μ¬λμ 1+2+3+3+4 = 13λΆμ΄ κ±Έλ¦¬κ² λλ€. κ° μ¬λμ΄ λμ μΈμΆνλλ° νμν μκ°μ ν©μ 1+3+6+9+13 = 32λΆμ΄λ€. μ΄ λ°©λ²λ³΄λ€ λ νμν μκ°μ ν©μ μ΅μλ‘ λ§λ€ μλ μλ€.
μ€μ μ μλ μ¬λμ μ Nκ³Ό κ° μ¬λμ΄ λμ μΈμΆνλλ° κ±Έλ¦¬λ μκ° Piκ° μ£Όμ΄μ‘μ λ, κ° μ¬λμ΄ λμ μΈμΆνλλ° νμν μκ°μ ν©μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μ¬λμ μ N(1 ≤ N ≤ 1,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ κ° μ¬λμ΄ λμ μΈμΆνλλ° κ±Έλ¦¬λ μκ° Piκ° μ£Όμ΄μ§λ€. (1 ≤ Pi ≤ 1,000)
μΆλ ₯
첫째 μ€μ κ° μ¬λμ΄ λμ μΈμΆνλλ° νμν μκ°μ ν©μ μ΅μκ°μ μΆλ ₯νλ€.
νμ΄
κ° μ¬λμ΄ λμ μΈμΆνλλ° κ±Έλ¦¬λ μκ°μ΄ μ μ μμλλ‘ κ³μ°ν΄μ£Όλ©΄ λλ€.
λ¬Έμ λ λ μΈμΆνλ μκ°μ ν©μΈλ° λ κ°μ§ λ°©λ²μ΄ μλ€.
1. μκ°λ³΅μ‘λ O(n^2) : λꡬλ μκ°ν μ μλ λ°©λ².
2. μκ°λ³΅μ‘λ O(n) : κ° μκ°μ΄ λμ€λ λΉλλ₯Ό κ³μ°νλ©΄ λλ€.
ex) time : 1 2 3 4 5 λΌκ³ νλ©΄
첫 λ²μ§Έ μ¬λ : 1
λ λ²μ§Έ μ¬λ : 1 + 2
μΈ λ²μ§Έ μ¬λ : 1 + 2 + 3
λ€ λ²μ§Έ μ¬λ : 1 + 2 + 3 + 4
λ€μ―λ²μ§Έ μ¬λ : 1 + 2 + 3 + 4 + 5
-> 1λΆ * 5λ² + 2λΆ * 4λ² + 3λΆ * 3λ² + 4λΆ * 2λ² + 5λΆ * 1λ²
-> μμμΌλ‘ λνλ΄λ©΄ time[i] * (n-i)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
// μ
λ ₯
cin >> n;
vector<int> time(n, 0);
for (int i=0; i<n; i++)
cin >> time[i];
// μ°μ°
sort(time.begin(), time.end());
// μΆλ ₯ (1)
int result = 0, sum;
for (int i=0; i<n; i++){
sum = 0;
for (int j=0; j<=i; j++)
sum += time[j];
result += sum;
}
// μΆλ ₯ (2) : μκ°λ³΅μ‘λ κ°μ
// (n-i)μ λΉλλ‘ μκ°
int result = 0;
for (int i=0; i<n; i++)
result += (time[i] * (n-i));
cout << result;
}