ALGORITHM

프로그래머스_level3_야근지수

서울소시민 2017. 9. 8. 18:20

문제 :

남을 일들의 작업량을 숫자로 4,3,3 이라고 표시하고, 한시간에 1씩 일을 처리한다고 했을때, 남을 시간을 N이라고 한다.

N시간동안 일을 처리했을때 남을 일의 제곱을 더해서 최소가 되는 값을 구하는 문제이다.


가장 큰수를 먼저 빼면 제곱의 합이 최소가 나온다.



#include<iostream>
#include<vector>
using namespace std;

int noOvertime(int no,vector<int> works)
{	
	int answer = 0;
  
  int max=0;
  int tempidx=0;
  
  for(int j=0;j<no;j++){
    for(int i=0;i<works.size();i++){
      if(max<=works[i]){
        max = works[i];
        tempidx=i;
      }
    }
    works[tempidx]--;
    max=0;
  }
  
for(int i=0;i<works.size();i++){
  answer+=works[i]*works[i];
}
    
	return answer;
}

int main()
{
	vector<int> works{4,3,3};
	int testNo = 4;

	int testAnswer = noOvertime(testNo,works);

	cout<<testAnswer;
}