반응형
https://www.acmicpc.net/problem/2217
2217번: 로프
N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을
www.acmicpc.net
위의 문제는 BaekJoon Online Judge의 알고리즘 분류 중
그리디 알고리즘의 카테고리에 포함되어 있는 문제이다.
주의점은 "모든 로프를 사용해야 할 필요는 없으며,
임의로 몇 개의 로프를 골라서 사용해도 된다."라는 점이다.
처음에 저 주의점을 안보고 풀다가 왜 틀렸는지 고민했다.
풀이는 먼저 로프를 int배열로 입력을 받은 다음 정렬을 시킨다.
그 다음 배열의 첫 번째 값과 로프의 개수를 곱해서 다시 배열에 저장하고,
두 번째는 로프의 개수 - 1을 해서 다시 배열에 저장한다.
이런 방식으로 로프의 개수를 한 개씩 줄여가면서 저장한 다음,
다시 배열을 정렬하고 배열의 맨 마지막인 최대값을 출력한다.
import java.util.Scanner;
import java.util.Arrays;
public class Question_2217 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int[] rope = new int[number];
for(int i = 0; i < number; i++) {
rope[i] = sc.nextInt();
}
Arrays.sort(rope);
for(int i = 0; i < number; i++) {
rope[i] = rope[i] * (number-i);
}
Arrays.sort(rope);
System.out.println(rope[number-1]);
}
}
반응형
'BaekJoon > JAVA' 카테고리의 다른 글
[백준] 1012번 : 유기농 배추(JAVA) (0) | 2020.02.20 |
---|---|
[백준] 2178번 : 미로 탐색(JAVA) (0) | 2020.02.20 |
[백준] 11399번 : ATM(JAVA) (0) | 2020.02.12 |
[백준] 1931번 : 회의실배정(JAVA) (0) | 2020.02.12 |
[백준] 11047번 : 동전 0(JAVA) (0) | 2020.02.12 |
댓글