[#18][알고리즘] 야근 지수

프로그래머스 > 야근지수

문제 링크(https://programmers.co.kr/learn/challenge_codes/145)



















C++풀이
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
 
int noOvertime(int no,vector<int> works)
{
  int answer = 0;
  int maxindex = 0;
  
  while(no!=0){
    //최대값 구하기
    vector<int>::const_iterator it;
    it = max_element(works.begin(), works.end());
    
    //최대값이 있는 index 찾기
    for(int i = 0; i < works.size(); i++){
        if( works[i] == *it){
          maxindex = i;
      }
    }
    works[maxindex] -= 1;
    no--;
  }
  
  for(int i =0; i < works.size(); i++){
      answer += pow(works[i],2);
  }
 
    return answer;
}
 
int main()
{
    vector<int> works{3,5,2,1};
    int testNo = 4;
 
    int testAnswer = noOvertime(testNo,works);
 
    cout<<testAnswer;
}
cs

남은 시간 N동안 1씩 처리한 후, 남은 일의 제곱의 합이 최소가 되도록 하는 문제
제곱의 합이 최소가 되기 위해서는 최대값을 가진 일 부터 처리해야함
[3, 5, 2, 1] 남은시간 : 4
[3, 4, 2, 1] 남은시간 : 3
[3, 3, 2, 1] 남은시간 : 2
[2, 3, 2, 1] 남은시간 : 1
[2, 2, 2, 1] 남은시간 : 0 => 퇴근

야근지수 : 2² + 2² +2² + 1² = 4 + 4 + 4 + 1 = 13

댓글

가장 많이 본 글