Java/Algorithm

[Java-Algorithm] 백준 2217 로프 풀이

Jeong Jeon
반응형

문제 : https://www.acmicpc.net/problem/2217

 

2217번: 로프

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하

www.acmicpc.net

 

 

풀이 :

이 문제는 시간제한이 있는것을 생각안하고, 쉬운문제다 생각하고 2중for문을 사용해서 처음에 풀었다...

안일했다..

결국 아래 코드로 로직 수정.

 

처음에는 문제가 이상해보였지만, 결국 결론은 간단하였다.

K의 하중을 N개의 로프가 각각 K/N 씩 받는다고한다.

==> 예를 들어보자.

최종 문제에서 제시하는 정보는 선택한 로프 10, 20 , 30, 40 , 50 이 있다고했을때

N개의 로프를 선택하여 하중을 분산시킨다.

그렇다면 하중을 잘견디는 N개를 선택하는게 당연히 유리하다.

만약 3개를 선택했을때라면 30,40,50을 선택할 것이고, 30*3이 최대로 허용할 수 있는 무게가된다.

 

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		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);

		int result = 0;
		for (int i = N-1; i >= 0; i--) {
			//뽑은갯수중 숫자가 제일 작은것 * 갯수
			int tmp = arr[i]*(N-i);
			if(result<tmp) {
				result = tmp;
			}
		}
		System.out.println(result);
	}
반응형