본문 바로가기
공부/코딩 연습하기

[백준][C언어]2217번 로프

by 소소하지만유니크한 2019. 12. 12.
728x90

백준 2217번 문제 설명

가장 중요한 것은 로프를 병렬로 사용할 경우 들 수 있는 무게는 가장 약한 로프에 제한이 걸리게 된다. 예시로 10, 15를 들어 올릴 수 있는 로프가 있어 병렬로 물체를 들어올린다면 들 수 있는 무게의 최대는 한 로프가 중량 10을 최대로 들 수 있고 병렬의 경우 같은 중량이 걸리므로 10 * 2가 된다. 즉, 임의로 몇 개의 로프를 고르는가에 대한 제한은 없지만, 고른 개수를 k라고 할 때 k개의 로프 중 가장 약한 로프 무게가 병렬로 연결된 로프에 걸릴 무게가 되고, 그 무게에 k를 곱한 값이 들어올릴 수 있는 최대 무게가 된다. k 번째로 약한 로프를 구하기 위해 정렬 알고리즘을 사용하였다.

 

전체 성공 코드 

#include <stdio.h>
#include <stdlib.h>

int comp (const void *a, const void * b) {
        return *(int *)b - *(int *)a;
}

int max_ (int a, int b) {
        return a > b ? a : b;
}

int main() {
        int N; int i;
        scanf("%d", &N);
        int *rope = (int *)malloc(N * sizeof(int));

        for (i = 0; i < N; i++) {
                scanf("%d", &rope[i]);
        }

        qsort(rope, N, sizeof(int), comp);

        int max = 0;
        for (i = 0; i < N; i++) {
                max = max_(max, rope[i] * (i+1) );
        }

        printf("%d", max);
}
728x90

댓글