알고리즘

휴가 계획

게르마늄팔찌전도사 2024. 8. 2. 21:46

어느 회사에서 직원들의 휴가 계획을 관리하고 있습니다. 직원들은 휴가를 여러 날에 걸쳐 사용할 수 있지만, 회사는 한 번에 최대한 많은 휴가 요청을 승인하려고 합니다. 회사는 하루에 최대 k명의 직원만 휴가를 낼 수 있으며, 각 직원은 특정 날짜에 휴가를 요청합니다. 회사는 주어진 휴가 요청들을 가능한 한 많이 승인하면서도, 하루에 k명을 초과하지 않도록 해야 합니다.

직원들의 휴가 요청이 주어질 때, 회사가 승인할 수 있는 최대 휴가 요청 수를 구하는 함수를 작성하세요.

입력
정수 k: 하루에 최대 휴가를 낼 수 있는 직원 수.
정수 배열 requests: 각 직원이 휴가를 요청한 날짜를 나타내는 정수 배열 (각 날짜는 1부터 시작하는 양의 정수).
출력
회사가 승인할 수 있는 최대 휴가 요청 수를 나타내는 정수.
제약 조건
1 ≤ k ≤ 100
1 ≤ requests의 길이 ≤ 10,000
1 ≤ requests의 원소 ≤ 10,000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static int Solution(int k, int[] requests) {
        int answer = 0//답
        int day = requests[0];
        int improveDay = 0//지금날짜 승인
        for(int  i =0; i< requests.length; i++){
            if(day == requests[i]){
                if(improveDay < k){
                    improveDay++;
                    answer++;
                }
            }
            else {
                day = requests[i];
                improveDay =1;
                answer++;
            }
        }
        return answer;
    }
cs

 

이 문제는 월요일에 풀었던 그리디 알고리즘을 조금 더 공부하기 위해 풀었던 문제다. 덧칠하기보다 어렵다고 느껴졌는데, 아무래도 그리디 알고리즘에 익숙하지 않은 탓이 큰 것 같다. 최대인원수를 만나면 k로 고정하고, 아닌 경우 가는 인원을 늘려서 풀었다.

주말동안 그리디 알고리즘을 공부해야겠다. 

'알고리즘' 카테고리의 다른 글

10828번 스택  (0) 2024.08.06
카드 뭉치  (0) 2024.08.05
대충 만든 자판  (0) 2024.07.31
[java] 덧칠하기  (0) 2024.07.29
추억 점수  (0) 2024.07.17