# 문제

#입력 및 출력

# 풀이
생각해보면 간단한 문제다
일단 모든 로프를 사용할 필요는 없으니까 가장 많은 중량을 들 수 있는 로프부터 체크해보면 된다
따라서 입력받은 로프의 최대 중량을 배열에 넣고 내림차순 정렬했다
그 다음 병렬 연결하면 들 수 있는 중량 최대값을 구해서 둘의 max값을 구함
위의 예제에선 2개의 로프가 주어지는데 하나의 로프만 사용해서는 중량 15를 들 수 있고
두개의 로프를 병렬 연결하면 가장 작은 로프가 10을 들 수 있기 때문에 두 로프는 총 중량 20을 들 수 있다
따라서 병렬 연결 시엔 가장 작은 중량을 들 수 있는 로프를 기준으로 몇 개의 로프를 병렬했는지 확인하면 된다
말이 좀 어려운데 정리하면
max(주어진 로프 중량 중 가장 작은 중량을 가진 로프 * 병렬 연결된 로프 개수, 이전 max값)
이전 max값은 처음엔 하나의 로프로만 들 수 있는 최대 중량임
max 구하는 식을 주어진 로프만큼 반복하면 됨
#include <iostream>
#include <algorithm>
using namespace std;
int rope[100000];
bool compare(int a, int b) {
return a > b;
}
int main() {
int N, maxv = 0, count = 0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> rope[i];
}
sort(rope, rope + N, compare); // 내림차순 정렬
for (int i = 0; i < N; i++) {
count++;
maxv = max(rope[i] * count, maxv);
}
cout << maxv;
}

'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#1157 단어 공부 (0) | 2022.04.18 |
---|---|
#10162 전자레인지 (0) | 2022.04.17 |
#5585 거스름돈 (0) | 2022.04.16 |
#1026 보물 (0) | 2022.04.15 |
#11047 동전 0 (0) | 2022.04.14 |
댓글