반응형
문제 : https://www.acmicpc.net/problem/11399
서론
분류가 그리디 알고리즘으로 되어있는데, 그리디 알고리즘에 대한 개념이 없어도 문제에 어떻게 풀어야하는지 친절하게 설명해주고 있다.
문제 알고리즘 내용이 운영체제 job scheduling 방식 중 이론적으로 optimal한 방식으로 배웠던것 같다.
프로세스의 소요시간을 정확히 예측할 수 없어서 어디까지나 이론이라고 들었던것 같다.
아이디어
인출하는데 걸리는 시간이 가장 빠른 사람부터 먼저 처리하는 그리디 알고리즘.
p를 오름차순 정렬한 후에 각 사람의 대기시간은 앞 사람들과 나의 소요시간을 모두 더한다.
대기열의 사람들의 대기시간을 전부 더해서 출력한다.
구현
// c++
#include <iostream>
#include <algorithm>
using namespace std;
int p[1001];
int dp[1001];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> p[i];
sort(p, p + n);
dp[0] = p[0];
int result = dp[0];
for (int i = 1; i < n; i++) {
dp[i] = dp[i - 1] + p[i];
result += dp[i];
}
cout << result;
}
최근댓글