[#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

댓글
댓글 쓰기