알고리즘/boj

BOJ 11399번 ATM

칼퇴시켜주세요 2022. 11. 8. 19:52
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