728x90

문제를 읽어보면 OS 스케쥴링에서 SJF 알고리즘인것을 확인할 수 있다. 기존 1번 방식으로 모든 사람이 돈을 인출하는데 걸리는 wating time은 FIFO 스케쥴링에 의해 39 분을 기다려야 한다. 반면 SJF 는 가중치(P)가 가장 작은 순서 우선으로 처리한다.
n=[2,5,1,4,3] p=[1,2,3,3,4] 일때 일을 끝내는데 걸리는 시간은 다음과 같다
2= 1
5= 1+2
1= 1+2+3
4= 1+2+3+3
5= 1+2+3+3+4
위의 결과를 다 더하는것이 답이므로 다음과 같은 식을 구할 수 있다. i=n result += i*p[n-i]
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> p;
for(int i = 0; i < n; i++)
{
int a;
cin >> a;
p.push_back(a);
}
sort(p.begin(), p.end());
int result = 0;
for(int i = n; i > 0; i--)
{
result += i * p[n-i];
}
cout << result;
}
반응형
'알고리즘 > boj' 카테고리의 다른 글
BOJ 13549 숨바꼭질 3 (0) | 2022.12.27 |
---|---|
BOJ 1976 여행 가자 (0) | 2022.12.24 |
BOJ 18352 특정 거리의 도시 찾기 (1) | 2022.12.24 |
BOJ 1946 신입 사원 (0) | 2022.11.10 |
BOJ 1931번 회의실 배정 (0) | 2022.11.08 |