주녘공부일지

[프로그래머스 C#] Lv.3 야근 지수 본문

CodingTest/Programmers Lv.3

[프로그래머스 C#] Lv.3 야근 지수

주녘 2024. 3. 7. 15:04

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

주어진 수 만큼 배열 안에 있는 값을 뺄 수 있을 때, 배열 안의 값들의 제곱의 합의 최소 값을 구하는 문제

- 배열 안에 있는 최대 값에 -1을 하는 것을 n만큼 수행하면 최소 값을 구할 수 있음

    using System;

    public class Solution
    {
        public long solution(int n, int[] works)
        {
            long answer = 0;
            Array.Sort(works); // 오름차순

            for (int i = 0; i < n; i++)
            {
                int index = works.Length - 1; // 배열의 최대 값을 가리키는 인덱스

                // 배열의 최대 값 중에 가장 0에 가까운 인덱스 좌표 가리키기
                while (index > 0 && works[index] <= works[index - 1])
                    index--;

                // 만약 배열 안의 모든 값이 0이 됐다면
                if (works[index] == 0)
                    return 0;

                works[index]--; // 가장 큰 값에 -1
            }
            
            // 배열 안의 각 값의 제곱의 합
            for (int i = 0; i < works.Length; i++)
                answer += works[i] * works[i];

            return answer;
        }
    }