Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- FCF
- 그리디 알고리즘
- javascript
- 현금흐름표
- S&P500
- etf
- 잉여현금흐름
- 오버라이딩
- 객체지향
- 접근제어자
- 미국주식
- 인플레이션
- 알고리즘
- StringBuffer
- 백준
- 다형성
- 금리인상
- 배당성장
- Java
- 기업분석
- mco
- 자바
- 무디스
- 프로그래머스
- object
- 제태크
- XLF
- 주린이
- 주식
- 금리인하
Archives
- Today
- Total
오늘의하루
[Greedy Algorithm] 백준 2217번 : 로프(Java) 본문
https://www.acmicpc.net/problem/2217
문제
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.
하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.
각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.
입력
첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다.
출력
첫째 줄에 답을 출력한다.
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
int result = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// ArrayList<Integer> W = new ArrayList<>();
int[] W = new int[N];
for(int i = 0; i < N; i++) {
W[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(W);
result = W[0] * N;
for(int i = 1; i < N; i++) {
result = Math.max(result, W[i] * (N-i));
}
// 오답 1...틀렸다.....
// Collections.sort(W, Collections.reverseOrder());
//
// int max = 0;
// ArrayList<Integer> test = new ArrayList<>();
// test.add(W.get(0));
// for(int i = 1; i < N; i++) {
// int count = 1;
// while(true) {
// max = test.get(i-1) * i;
// int check = count * W.get(i);
// if(max < check) {
// test.get(check / (i+1));
// break;
// }
// count++;
// }
// }
//
// W.retainAll(test);
// result = W.get(W.size()-1) * W.size();
System.out.println(result);
}
}
Explanation
오답에 대한 반례를 찾지 못하였지만 오답을 조금 변경하여 풀었습니다.
Result
'Algorithm' 카테고리의 다른 글
[Greedy Algorithm] 백준 5585번 : 거스름돈 (Java) (0) | 2023.08.04 |
---|---|
[Greedy Algorithm] 백준 1541번 : 잃어버린 괄호 (Java) (0) | 2023.08.04 |
[Greedy Algorithm] 백준 1931번 : 회의실 배정 (Java) (0) | 2023.08.04 |
[Greedy Algorithm] 백준 11047번 : 동전 0(Java) (0) | 2023.08.04 |
[Greedy Algorithm] 백준 11399번 : ATM(Java) (0) | 2023.08.04 |
Comments