🔑알고리즘/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]); // 최댓값 출력

	}

}

 

정답입니다. 재밌었던 문제였습니다. 

 

반응형
댓글수0