위에 내용을 적용한 코드는 아래와 같다.



def solution(n, works):
    tot_left_time = sum(works) -n; # 총 일해야하는 시간 - 남은 시간을 뺀것, [4,3,3], 4 이면 6이 나옴
    avg_part_time = round(tot_left_time / len(works)) # 야근해야하는 시간을 종류의 갯수로 남아서 반올림함, 6 / 3 이므로 2
    # 평균값에 근접하도록 각 종류를 바꾸는게 포인트
    ans = 0;
    if tot_left_time < n: # 야근할 필요가 없으니 0
        return 0;
    elif avg_part_time == 1: # [2,1,2], 1 의 경우 1이 평균값이므로 1,1,2 이렇게 구성이 되어야함.
        ans = (len(works) - 1) + (tot_left_time- ((len(works)-1)))**2
        return ans
    elif (tot_left_time) % avg_part_time == 0: # 야근해야하는 총시간이 6시간이고 temp가 2시간이면
        return avg_part_time**2 * len(works)
    else: # 7시간 야근해야하고 종류가 4개인 경우, 2,2,2,1 이렇게 해야함
        ans = (tot_left_time - avg_part_time * (len(works)-1))**2 + avg_part_time**2 * (len(works)-1)
    return ans

위에 처럼 해서 끝이나면 정말 아름다웠을 것이다..

하지만 이러한 풀이 방법 역시 제대로 적용되지 않는다..

왜냐하면 최초의 야근 양이 평균값보다 작을경우 오히려 일을 늘리는 경우가 발생하기 때문..

(4,2,1이 주어지고 평균이 2가 나왔다고 가정하면 1이 오히려 2가 되는 기이한 상황이 발생)

그렇기에 이를 해결하기 위해선 처음부터 다시 생각해봐야한다...

+ Recent posts