[#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
댓글
댓글 쓰기