어느 회사에서 직원들의 휴가 계획을 관리하고 있습니다. 직원들은 휴가를 여러 날에 걸쳐 사용할 수 있지만, 회사는 한 번에 최대한 많은 휴가 요청을 승인하려고 합니다. 회사는 하루에 최대 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로 고정하고, 아닌 경우 가는 인원을 늘려서 풀었다.
주말동안 그리디 알고리즘을 공부해야겠다.