본문 바로가기
PS/Baekjoon

[Baekjoon] 2217 - 로프

by 서현 SEOHYEON 2023. 6. 30.

📝 문제

 

 

🔑 풀이 과정

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

→ 이는 모든 로프가 동일한 중량을 들어야 한다는 것을 의미한다.

 

· n개의 로프를 사용해서 들어 올릴 수 있는 최대 중량은 n개 로프 중 가장 적게 버틸 수 있는 로프의 최대 중량 * n

 

· 문제의 설명에서 "모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다." 라는 조건이 나와있다. 우리는 n개의 로프가 있을 때, n개 로프를 다 사용했을 때 최대 중량, n-1개 로프를 사용할 때 최대 중량, n-2개 로프를 사용할 때 최대 중량 ... 1개의 로프를 사용했을 때 최대중량을 구해서 그 중 가장 큰 값을 구하면 된다.

 

· 위에 적어둔 사용할 수 있는 로프중 제일 적은 중량 * 사용 가능한 개수 공식을 사용하면 된다. 제일 적은 중량을 사용하기 위해 배열을 정렬해준다.

 

· 풀이 과정

 

 

🔓 답안

import java.io.*;
import java.util.Arrays;

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());

        int[] arr = new int[N];

        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(br.readLine());
        }

        //정렬
        Arrays.sort(arr);

        //계산
        int max = 0;
        for(int i = 0; i < N; i++){
            int sum = arr[i] * (N-i);

            if(sum > max)
                max = sum;
        }

        //출력
        bw.write(max + "\n");
        bw.flush();
        bw.close();
    }

}

 

 

 

🖤 알고리즘 분류

- 수학

- 그리디 알고리즘

- 정렬

'PS > Baekjoon' 카테고리의 다른 글

[Baekjoon] 15650 - N과 M (2)  (0) 2023.07.02
[Baekjoon] 15649 - N과 M (1)  (1) 2023.07.01
[Baekjoon] 1026 - 보물  (0) 2023.06.29
[Baekjoon] 11399 - ATM  (0) 2023.06.28
[Baekjoon] 16139 - 인간-컴퓨터 상호작용  (0) 2023.06.27

댓글