티스토리 뷰

1. 문제

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

 

2217번: 로프

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

www.acmicpc.net

 

2. 설명

왜 그리디에 있는지 모르겠는 문제.

최대 중량을 구하는 것이라서 배열을 한번 순환했다.

문제를 읽어보면 해당 로프가 버틸 수 있는 최소 중량 * 로프 수 라는 식이 나온다.

그거 계산해서 최댓값 구하면 된다.

 

3. 코드

import java.util.Arrays;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int[] rope = new int[N];
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine());
			rope[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(rope);
		
		int max = 0;
		for(int i=0; i<rope.length; i++) {
			int weight = rope[i] * (rope.length-i);
			max = max > weight ? max : weight;
		}
		System.out.println(max);
	}
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday