백준(C언어) 풀이/그리디(Greedy) 알고리즘

백준(C++) 2217번 로프 풀이

개발윗미 2021. 8. 3. 19:37

C++로 구현한 2217번 로프 문제 풀이입니다.

 

https://www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net


#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	int n, w[100001], max=0;
	scanf("%d", &n);
	for(int i=0; i<n; i++) {
		scanf("%d", &w[i]);
	}
	sort(w, w+n);
	for(int i=0; i<n; i++) {
		if(max < w[i] * (n-i))
			max = w[i] * (n-i);
	}
	printf("%d", max);
}

 

해당 문제는 오름차순 정렬을 통해 최대 중량을 구하면 된다.

 

입력한 로프의 수만큼 반복문을 돌려 배열 w의 각 인덱스 값에 입력을 받아 차례로 넣어준다.

 

입력이 모두 끝나면 sort() 메소드를 통해 오름차순 정렬이 수행될 수 있도록 한다.

 

마지막 반복문에서는 로프의 수를 작은 것부터 하나씩 빼면서 최대 중량을 갱신해준다.