Algorithm/λ°±μ€€(BOJ)

[λ°±μ€€ BOJ / C++] 2217번: λ‘œν”„

meeeeejin 2020. 12. 28. 21:21

문제

 

<문제>

N(1 ≤ N ≤ 100,000)개의 λ‘œν”„κ°€ μžˆλ‹€. 이 λ‘œν”„λ₯Ό μ΄μš©ν•˜μ—¬ μ΄λŸ°μ €λŸ° 물체λ₯Ό λ“€μ–΄ 올릴 수 μžˆλ‹€. 각각의 λ‘œν”„λŠ” κ·Έ κ΅΅κΈ°λ‚˜ 길이가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ“€ 수 μžˆλŠ” 물체의 μ€‘λŸ‰μ΄ μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ„ μžˆλ‹€.

 

ν•˜μ§€λ§Œ μ—¬λŸ¬ 개의 λ‘œν”„λ₯Ό λ³‘λ ¬λ‘œ μ—°κ²°ν•˜λ©΄ 각각의 λ‘œν”„μ— κ±Έλ¦¬λŠ” μ€‘λŸ‰μ„ λ‚˜λˆŒ 수 μžˆλ‹€. k개의 λ‘œν”„λ₯Ό μ‚¬μš©ν•˜μ—¬ μ€‘λŸ‰μ΄ w인 물체λ₯Ό λ“€μ–΄ 올릴 λ•Œ, 각각의 λ‘œν”„μ—λŠ” λͺ¨λ‘ κ³ λ₯΄κ²Œ w/k 만큼의 μ€‘λŸ‰μ΄ 걸리게 λœλ‹€.

 

각 λ‘œν”„λ“€μ— λŒ€ν•œ 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 λ‘œν”„λ“€μ„ μ΄μš©ν•˜μ—¬ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 물체의 μ΅œλŒ€ μ€‘λŸ‰μ„ κ΅¬ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λͺ¨λ“  λ‘œν”„λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  ν•„μš”λŠ” μ—†μœΌλ©°, μž„μ˜λ‘œ λͺ‡ 개의 λ‘œν”„λ₯Ό κ³¨λΌμ„œ μ‚¬μš©ν•΄λ„ λœλ‹€.

 

<μž…λ ₯>

첫째 쀄에 μ •μˆ˜ N이 주어진닀. λ‹€μŒ N개의 μ€„μ—λŠ” 각 λ‘œν”„κ°€ 버틸 수 μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ΄ 주어진닀. 이 값은 10,000을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

 

<좜λ ₯>

첫째 쀄에 닡을 좜λ ₯ν•œλ‹€.

 

www.acmicpc.net/problem/2217

 

2217번: λ‘œν”„

N(1 ≤ N ≤ 100,000)개의 λ‘œν”„κ°€ μžˆλ‹€. 이 λ‘œν”„λ₯Ό μ΄μš©ν•˜μ—¬ 이런 μ €λŸ° 물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλ‹€. 각각의 λ‘œν”„λŠ” κ·Έ κ΅΅κΈ°λ‚˜ 길이가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ“€ 수 μžˆλŠ” 물체의 μ€‘λŸ‰μ΄ μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ„ μžˆλ‹€. ν•˜

www.acmicpc.net

 

 

 

 

문제 풀이

 

각 λ‘œν”„κ°€ 버틸 수 μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ„ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ λ’€ λ‘œν”„λ₯Ό 1개만 μ΄μš©ν–ˆμ„ 경우, 2개만 μ΄μš©ν–ˆμ„ 경우, ..., N개 μ΄μš©ν–ˆμ„ 경우의 μ΅œλŒ€ μ€‘λŸ‰μ„ κ΅¬ν•©λ‹ˆλ‹€. μ΄λ•Œ κ°€μž₯ 큰 μ΅œλŒ€ μ€‘λŸ‰μ΄ answerκ°€ λ©λ‹ˆλ‹€. 

 

예λ₯Ό λ“€μ–΄ μ •λ ¬ν•œ rope의 μ΅œλŒ€ μ€‘λŸ‰μ΄ [15, 10, 7, 5, 5]일 경우

  • λ‘œν”„ 1개 이용
    weight = 15 * 1 = 15
  • λ‘œν”„ 2개 이용
    weight = 10 * 2 = 20
  • λ‘œν”„ 3개 이용
    weight = 7 * 3 = 21
  • λ‘œν”„ 4개 이용
    weight = 5 * 4 = 20
  • λ‘œν”„ 5개 이용
    weight = 5 * 5 = 25

λ”°λΌμ„œ max_weight은 25κ°€ λ©λ‹ˆλ‹€. 

 

λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬μ—λŠ” functional 헀더에 μ •μ˜λ˜μ–΄ μžˆλŠ” greater<>()λ₯Ό μ΄μš©ν–ˆμŠ΅λ‹ˆλ‹€. 

 

 

 

μ†ŒμŠ€μ½”λ“œ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//2217번: λ‘œν”„ 
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int N, answer = 0;
    int max_weight = 0;
    cin >> N;
    vector<int> rope(N);
    for(int i = 0; i < N; i++)
        cin >> rope[i];
 
    sort(rope.begin(), rope.end(), greater<>());    //λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
 
    for(int i = 0; i < N; i++) {
        if(rope[i] * (i + 1> max_weight)
            max_weight = rope[i] * (i + 1);
    }
 
    answer = max_weight;
    cout << answer;
 
    return 0;
}
cs

 

 

 

 

 

 

κ³΅λΆ€ν•œ 것을 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μˆ˜μ •ν•  뢀뢄이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

 

 

728x90