[백준] 2217번: 로프 자바(Java)

2025. 1. 6. 22:35·알고리즘/그리디

문제


 

2217번: 로프

N개의 로프를 이용해 들어올릴 수 있는 물체의 최대 중량을 구하는 프로그램을 작성하시오.

접근법


문제만 이해하면 쉬운 문제다.

k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에 모두 고르게 w/k 만큼의 중량이 걸린다.

N은 이미 입력값으로 주어지고 있기 때문에, 출력값이 W라고 하면 W/N 만큼의 중량이 각 로프에 골고루 걸린다.

즉, N이 2이고, 10, 15가 로프의 가용중량으로 주어지면 2*10 = 20이 최대 중량이 되는 것이다.

∵ W/N = (각 로프의 가용 중량 중 최솟값) / W = (각 로프의 가용 중량 중 최솟값) * N

이때, 문제의 예외가 발생한다.

모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

이 부분이다. 따라서, 우리는 항상 각 로프의 가용 중량 중 최솟값을 고르는게 아니라 최솟값부터 하나씩 없애보면서 로프가 버틸 수 있는 최대 중량을 구해야 하는 것이다.

예를 들어보자.

3 5 10 15가 주어진다고 하면, 10이 최솟값이므로 5 * 3 = 15을 최대 중량으로 구할 수 있다. 하지만 5를 포함하지 않아도 되므로 제거하고 구하면 10 * 2 = 20으로 더 커지는 것을 볼 수 있다. 15 * 1 = 15 보다 20이 더 크기 때문에 답은 20이 된다.

코드를 보면 이해가 빠를 것이다.

 

풀이


import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        ArrayList<Integer> ropes = new ArrayList<>(N);

        for (int i = 0; i < N; i++) {
            ropes.add(Integer.parseInt(br.readLine()));
        }

        Collections.sort(ropes);

        int W = 0;

        for (Integer rope : ropes) {
            W = Math.max(W, rope * N);
            N--;
        }

        bw.write(String.valueOf(W));
        bw.flush();
    }
}

'알고리즘 > 그리디' 카테고리의 다른 글

[백준] 14916번: 거스름돈 자바(Java)  (1) 2025.01.11
[백준] 13305번: 주유소 자바(Java)  (0) 2025.01.07
[백준] 1541번: 잃어버린 괄호 자바(Java)  (2) 2025.01.06
[백준] 11399번: ATM 자바(Java)  (3) 2024.12.31
[백준] 1018번: 보물 자바(Java)  (1) 2024.12.28
'알고리즘/그리디' 카테고리의 다른 글
  • [백준] 13305번: 주유소 자바(Java)
  • [백준] 1541번: 잃어버린 괄호 자바(Java)
  • [백준] 11399번: ATM 자바(Java)
  • [백준] 1018번: 보물 자바(Java)
park-walnut
park-walnut
박호두의 블로그 입니다.
  • park-walnut
    박호두의 블로그
    park-walnut
  • 전체
    오늘
    어제
    • 분류 전체보기 (12)
      • cs지식 (0)
        • os (0)
        • 컴퓨터구조 (0)
        • DB (0)
      • 알고리즘 (10)
        • 정렬 (1)
        • 브루트포스 (2)
        • 그리디 (6)
        • 그래프 (1)
      • 트러블 슈팅 (1)
      • server (1)
        • spring (0)
        • jpa (0)
        • redis (0)
      • 일상 (1)
        • 음악 (1)
        • 일기 (0)
      • 프로젝트 (0)
  • hELLO· Designed By정상우.v4.10.3
park-walnut
[백준] 2217번: 로프 자바(Java)
상단으로

티스토리툴바