코딩테스트 연습 기록

이종길·2022년 1월 4일
0

코딩테스트 연습

목록 보기
34/128

2022.01.04 14일차

백준 2217번 (로프)

문제

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

하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

나의 풀이

10, 16, 20
1) 10 + 10 + 10
2) 16 + 16 => 최댓값
3) 20

  1. 로프 N, 최대 중량, 로프 선택 자유
  2. 순서대로 배열, 오름차순
  3. 큰 값부터 시작하면 값 * 순서가 중량, 작은 값부터 계산하려면 반대
  4. max 값 구하기
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int[] nArr = new int[n];

        for (int i = 0; i < n; i++) {
            nArr[i] = scanner.nextInt();
        }

        Arrays.sort(nArr);
        int max = Integer.MIN_VALUE;

        for (int x = 0; x < n; x++) {
            int testNum = nArr[x] * (nArr.length - x);
            if (max <= testNum) {
                max = testNum;
            }
        }

        System.out.println(max);
    }
}

생각하기

profile
Go High

0개의 댓글

관련 채용 정보