반응형
문제 설명
- 로프 N개
- k개의 로프로 w중량의 물체를 들어올릴 때 한 로프에 가해지는 무게는 w/k
=> 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량 출력
문제 풀이
로프를 이용해 들 수 있는 최대 중량을 구하려면 로프가 들 수 있는 무게는 크면서, 로프가 많아 무게를 최대한 나눠가져야 한다.
로프 3개가 버틸 수 있는 질량이 100, 100, 100 이라고 하면 중량 x의 물체가 한 로프 당 x/3씩 가해진다. 각각의 로프는 100씩 버틸 수 있으므로 이 로프들이 들 수 있는 물체의 최대 중량은 300이다.
하지만 로프 3개가 버틸 수 있는 질량이 100, 100, 10 이라고 하면 세번째 로프가 10밖에 버티지 못하기 때문에 중량 30의 물체가 최대 중량이 된다.
따라서 로프를 a개 고르고 로프 중 가장 적은 무게를 들 수 있는 로프의 최대 중량이 b일 때, 이 로프들이 들 수 있는 무게의 최대는 a x b 이다.
이를 이용해 우선순위 큐에 로프의 최대 중량 값을 입력받고, 가장 중량 값이 적은 로프부터 (로프의 무게 x 로프의 개수)를 연산하고, 그 중 최대 값을 찾아 출력했다.
문제 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class _2217_로프 {
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i =0; i<N;++i) {
pq.add(Integer.parseInt(in.readLine()));
}
int max = 0;
while(!pq.isEmpty()) {
max = Math.max(max, pq.poll() * (pq.size()+1));
}
System.out.println(max);
}
}
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
Baekjoon_1946_신입사원 (0) | 2020.12.16 |
---|---|
Baekjoon_1541_잃어버린 괄호 (0) | 2020.12.15 |
Baekjoon_1074_Z (0) | 2020.12.14 |
Baekjoon_20303_할로윈의 양아치 (0) | 2020.12.10 |
Baekjoon_20208_진우의 민트초코우유 (0) | 2020.12.09 |