🔑알고리즘/baekjoon
백준 2217 : 로프 - 자바 문제 풀이
pkyung
2022. 5. 21. 22:29
반응형
https://www.acmicpc.net/problem/2217
2217번: 로프
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하
www.acmicpc.net

로프 문제입니다.
그리드 알고리즘을 활용하는 문제였습니다.
예제 입력은 이와 같고 출력은 20이 되어야합니다.
k개의 로프를 사용하여 중량이 w를 들 때 w/k만큼의 중량이 걸리게 되고 20이상이 되면 첫 번째 루프는 끊어지기 때문입니다.
2
10
15
이러한 문제는 다른 예제를 써보면서 이해하는 것이 좋습니다.
4
15
17
30
50
내림차순 정렬이 되어있고
15 * 4 = 60
17 * 3 = 51
30 * 2 = 60
50 * 1 = 50
이 중 가장 큰 수를 출력해야 합니다.
정답 코드입니다.
BufferedReader를 활용하여 입력을 받았습니다.
또한 Arrays.sort()를 이용해 배열을 정렬했고, for문을 이용하여 loop[i] * (n - i) 계산을 answer[] 배열 안에 저장했습니다.
import java.io.*;
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[] loop = new int[n];
for(int i = 0; i < n; i ++) {
loop[i] = Integer.parseInt(br.readLine()); //로프 당 중량 입력 받기
}
Arrays.sort(loop); // 중량 내림차순 정렬
int[] answer = new int[n];
for(int i = 0; i < n; i++) {
answer[i] = loop[i] * (n-i);
}
Arrays.sort(answer);
System.out.println(answer[n-1]); // 최댓값 출력
}
}
정답입니다. 재밌었던 문제였습니다.

반응형