🖥️ CS/Baekjoon Algorithms

백준 2217번 로프 (C++)

한국의 메타몽 2021. 4. 30. 03:20

문제 링크 : www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net

문제 풀이는 다음과 같다.

1. 값을 입력 받고 내림차순으로 정렬한다.

2. 정답값을 내림차순으로 정렬된 배열의 맨 첫 번째 값으로 저장한다.

3. for문을 배열의 첫 번째 부터 마지막까지 진행한다.

정답값을 현재 정답값과 배열의 i번째 값 * i+1 중 큰 값으로 저장한다.

for(int i=1; i<n; i++) ans = max(ans,v[i]*(i+1));

결국 중요한 것은, i번째 값이 전체 무게 / 전체 갯수를 견딜수 있냐 없냐이다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool comp(int a, int b){
    return a>b;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n = 0, ans = 0;
    cin >> n;
    vector<int> v(n);
    for(int i=0; i<n; i++) cin >> v[i];
    sort(v.begin(),v.end(),comp);
    ans = v[0];
    for(int i=1; i<n; i++) ans = max(ans,v[i]*(i+1));
    cout << ans << "\n";
    return 0;
}

 

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

백준 2636번 치즈 (C++)  (0) 2021.05.03
백준 16234번 인구이동 (C++)  (0) 2021.05.02
백준 2290번 LCD Test (C++)  (0) 2021.04.30
백준 15685번 드래곤커브 (C++)  (0) 2021.04.28
백준 14890번 경사로 (C++)  (0) 2021.04.27