야근 지수
x회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 2^2 + 2^2 + 2^2 = 12가 되어 12를 반환해 줍니다.
제곱의 합을 최소로 만들려면 큰 수부터 줄여주는 것이 장땡이다. 반복할 때 마다 제일큰 수를 구해서 줄여나갔는데, 이렇게 정리하면서 생각해보니까 그냥 계속 sort해주면서 마지막 숫자를 줄여주면 더 깔끔하게 되는 거였다. 하핫 뭐 그럴수도있지~^^~
수민이 할일이 너무많다 근ㄷㅔ.. 수민이 화이팅..!
x
class NoOvertime {
public int noOvertime(int no, int[] works) {
int result = 0;
// 야근 지수를 최소화 하였을 때의 야근 지수는 몇일까요?
for (int i = 0; i < no; i++) {
int maxWork = 0;
int max = works[0];
for (int j = 1; j < works.length; j++) {
if (max < works[j]) {
maxWork = j;
max = works[j];
}
}
works[maxWork]--;
/* System.out.println(maxWork); */
}
for (int i = 0; i < works.length; i++)
result += (works[i] * works[i]);
return result;
}
public static void main(String[] args) {
NoOvertime c = new NoOvertime();
int[] test = { 4, 3, 3 };
System.out.println(c.noOvertime(4, test));
}
}
'공부 > algorithm' 카테고리의 다른 글
[programmers] 멀리 뛰기 (0) | 2018.05.22 |
---|---|
[programmers] N개의 최소공배수 (0) | 2018.05.22 |
[programmers] 다음 큰 숫자 (0) | 2018.05.22 |
[programmers] 시저 암호 (0) | 2018.05.22 |
[programmers] 소수 찾기 (0) | 2018.05.22 |
댓글