1758 알바생
https://www.acmicpc.net/problem/1758
문제설명
그리디 알고리즘을 사용하여 알바생의 최대 시급 계산
- 각 알바생에게 지급할 시급은 그 알바생의 순서에 따라 조정된다.
- 시급은 내림차순으로 정렬된 후, 시급이 감소하는 순서로 지급된다.
- 각 알바생이 받을 수 있는 최대 시급을 계산하여 총 시급을 계산한다.
접근방식
O(n log n) 시간복잡도
입력된 시급만큼 배열에 저장하고, 정렬한다.
배열의 정렬은 O(n log n)의 시간복잡도를 가진다.
문제 조건 분석 과정
1. 첫번째 줄에 알바생의 수 n이 주어진다.
2. 다음 n 줄에 각 알바생의 시급이 주어진다.
사용된 자료구조
- Arrays.sort(arr, Collections.reverseOrder()):
- 배열을 내림차순으로 정렬한다
전체코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Integer[] arr = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
//배열을 내림차순으로 정렬
Arrays.sort(arr, Collections.reverseOrder());
//계산결과를 저장
long sum = 0;
//인덱스 값
int z = 0;
for (int i = 0; i < n; i++) {
//z를 뺀 값이 0보다 큰 경우에 sum에 추가
if (arr[i] - z > 0) {
sum += arr[i] - (z++);
} else {
break;
}
}
sb.append(sum);
System.out.print(sb.toString());
br.close();
}
}
'자료구조 > 문제풀이' 카테고리의 다른 글
[백준 JAVA] 2217 로프 (0) | 2024.08.01 |
---|---|
[백준 JAVA] 2141 우체국 (0) | 2024.08.01 |
[백준 JAVA] 1541 잃어버린 괄호 (0) | 2024.08.01 |
[백준 JAVA] 1343 폴리오미노 (0) | 2024.08.01 |
[백준 JAVA] 2531 회전초밥 (0) | 2024.07.25 |