출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/2217
2217번: 로프
N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만
www.acmicpc.net
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100000;
int N;
int arr[MAX];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
sort(arr, arr + N);
int maxNum = 0;
for (int i = 0; i < N; i++)
{
if (maxNum < arr[i] * (N - i))
maxNum = arr[i] * (N - i);
}
cout << maxNum;
}
예를 들어 [1, 5, 10, 25, 50, 100] N=6 이라는 배열이 주어졌다 가정해보자.
각 로프들이 들어야 하는 중량을 1이라 한다면 6개 모두가 가능하기 때문에 1*6=6이 될 것이다.
각 로프들이 들어야 하는 중량을 5라 한다면 1을 제외한 5개가 가능하기 때문에 5*5=25가 될 것이다.
↓
각 로프들이 들어야 하는 중량으 100이라 한다면 1개 만이 가능하기 때문에 100*1=100이 될 것이다.
즉, 결과값으로 나온 [6. 25, ... , 100] 중 최대값이 정답이 된다.
백준 4641 Doubles(brute force) (0) | 2020.07.16 |
---|---|
백준 2858 기숙사 바닥(brute force) (0) | 2020.07.16 |
백준 10164 격자상의 경로(dynamic programming) (0) | 2020.07.13 |
백준 2011 암호코드(dynamic programming) (0) | 2020.07.11 |
백준 1915 가장 큰 정사각형(dynamic programming) (0) | 2020.07.09 |
댓글 영역