반응형
문제
풀이
package greedy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException{
// 로프
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());//로프의 개수
int[] arr = new int[n];//각 로프의 최대 중량
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);//오름차순 정렬
int cnt = 0;//병렬로 연결된 로프 개수
int max = 0;//물체의 최대 중량
for(int i = n - 1; i >= 0; i--) {
//각 로프 병렬 연결 계산
arr[i] = arr[i] * (cnt + 1);
cnt++;
if(arr[i] > max) {
//최대 중량 구하기
max = arr[i];
}
}
System.out.println(max);
br.close();
}
}
팁
물체의 최대 중량을 구하는 방법
-> 최대 중량이 큰 로프순으로 꺼내서 병렬로 연결 후, 최댓값을 구한다.
ex) 중량이 [10, 15]인 2개의 로프
1) 중량이 15인 로프 => 최대 중량 15 * 1 = 15
2) 중량이 10인 로프 => 최대 중량 10 * 2 = 20
3) 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량은 20이다.
for(int i = n - 1; i >= 0; i--) {
//각 로프 병렬 연결 계산
arr[i] = arr[i] * (cnt + 1);
cnt++;
if(arr[i] > max) {
//최대 중량 구하기
max = arr[i];
}
}
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준] 1439.뒤집기 / 이코테.문자열 뒤집기(Java8) (0) | 2021.10.07 |
---|---|
[백준] 1946.신입 사원(Java8) (0) | 2021.10.06 |
[백준] 11047.동전 0(Java8) (0) | 2021.10.04 |
[백준] 11399.ATM(Java8) (0) | 2021.10.04 |
[백준] 2839.설탕 배달(Java8) (2) | 2021.10.01 |