본문 바로가기
Algorithm/📖Baekjoon

#2217 로프

by yewoneeee 2022. 4. 17.

# 문제

#입력 및 출력

# 풀이

생각해보면 간단한 문제다

일단 모든 로프를 사용할 필요는 없으니까 가장 많은 중량을 들 수 있는 로프부터 체크해보면 된다

따라서 입력받은 로프의 최대 중량을 배열에 넣고 내림차순 정렬했다

그 다음 병렬 연결하면 들 수 있는 중량 최대값을 구해서 둘의 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

댓글