프로그래머스 야근지수 C++알고리즘 연습 level3
야근 지수
회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 22 + 22 + 22 = 12가 되어 12를 반환해 줍니다.
#include<iostream>
#include<vector>
using namespace std;
int noOvertime(int time,vector<int> works)
{
int answer=0,max=0,index=0;
while(time>0) // 1시간당 제일 큰 숫자를 가진 배열 인덱스를 찾고, 해당 배열의 값을--한다. ( 제일 큰 수의 제곱 값이 크니까)
{
for(int i=0;i<=works.size();i++) //제일 큰 인덱스 찾기
{
if(max<=works[i])
{
max= works[i];
index= i;
}
}
works[index]--;
max=0;
time--;
}
for(int i: works) // 제곱값 더하기
answer += i*i;
return answer;
}
int main()
{
vector<int> works{4,3,3};
int testNo = 4;
int testAnswer = noOvertime(testNo,works);
cout<<testAnswer;
}
'OLD개발이야기 > 알고리즘 공부' 카테고리의 다른 글
C++/ double 소수점 자리 뒤 출력 /int string 으로 (1) | 2018.04.20 |
---|---|
알고리즘 공부 ) 프로그래머스 - 최대공약수와 최소공배수 C++ (0) | 2018.04.18 |
Vector사용법 (0) | 2018.02.22 |
프로그래머스 숫자의표현 C++ 알고리즘 문제 Level4 (0) | 2018.02.21 |
프로그래머스 효진이 멀리 뛰기 C++ 알고리즘 연습 level3 (2) | 2018.02.21 |