Algorithm/λ°±μ€€(BOJ)

[λ°±μ€€ BOJ / C++] 11399번: ATM

meeeeejin 2020. 12. 28. 20:52

문제

 

<문제>

μΈν•˜μ€ν–‰μ—λŠ” ATM이 1λŒ€λ°–μ— μ—†λ‹€. μ§€κΈˆ 이 ATM μ•žμ— Nλͺ…μ˜ μ‚¬λžŒλ“€μ΄ 쀄을 μ„œμžˆλ‹€. μ‚¬λžŒμ€ 1λ²ˆλΆ€ν„° Nλ²ˆκΉŒμ§€ λ²ˆν˜Έκ°€ 맀겨져 있으며, i번 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ€ Pi뢄이닀.

 

μ‚¬λžŒλ“€μ΄ 쀄을 μ„œλŠ” μˆœμ„œμ— λ”°λΌμ„œ, λˆμ„ μΈμΆœν•˜λŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ˜ 합이 λ‹¬λΌμ§€κ²Œ λœλ‹€. 예λ₯Ό λ“€μ–΄, 총 5λͺ…이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우λ₯Ό μƒκ°ν•΄λ³΄μž. [1, 2, 3, 4, 5] μˆœμ„œλ‘œ 쀄을 μ„ λ‹€λ©΄, 1번 μ‚¬λžŒμ€ 3λΆ„ λ§Œμ— λˆμ„ 뽑을 수 μžˆλ‹€. 2번 μ‚¬λžŒμ€ 1번 μ‚¬λžŒμ΄ λˆμ„ 뽑을 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, 3+1 = 4뢄이 걸리게 λœλ‹€. 3번 μ‚¬λžŒμ€ 1번, 2번 μ‚¬λžŒμ΄ λˆμ„ 뽑을 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, 총 3+1+4 = 8뢄이 ν•„μš”ν•˜κ²Œ λœλ‹€. 4번 μ‚¬λžŒμ€ 3+1+4+3 = 11λΆ„, 5번 μ‚¬λžŒμ€ 3+1+4+3+2 = 13뢄이 걸리게 λœλ‹€. 이 κ²½μš°μ— 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ˜ 합은 3+4+8+11+13 = 39뢄이 λœλ‹€.

 

쀄을 [2, 5, 1, 4, 3] μˆœμ„œλ‘œ 쀄을 μ„œλ©΄, 2번 μ‚¬λžŒμ€ 1λΆ„λ§Œμ—, 5번 μ‚¬λžŒμ€ 1+2 = 3λΆ„, 1번 μ‚¬λžŒμ€ 1+2+3 = 6λΆ„, 4번 μ‚¬λžŒμ€ 1+2+3+3 = 9λΆ„, 3번 μ‚¬λžŒμ€ 1+2+3+3+4 = 13뢄이 걸리게 λœλ‹€. 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ˜ 합은 1+3+6+9+13 = 32뢄이닀. 이 방법보닀 더 ν•„μš”ν•œ μ‹œκ°„μ˜ 합을 μ΅œμ†Œλ‘œ λ§Œλ“€ μˆ˜λŠ” μ—†λ‹€.

 

쀄을 μ„œ μžˆλŠ” μ‚¬λžŒμ˜ 수 Nκ³Ό 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ Piκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ˜ ν•©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

<μž…λ ₯>

첫째 쀄에 μ‚¬λžŒμ˜ 수 N(1 ≤ N ≤ 1,000)이 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ Piκ°€ 주어진닀. (1 ≤ Pi ≤ 1,000)

 

<좜λ ₯>

첫째 쀄에 κ° μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ˜ ν•©μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

 

 

www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 쀄에 μ‚¬λžŒμ˜ 수 N(1 ≤ N ≤ 1,000)이 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” 각 μ‚¬λžŒμ΄ λˆμ„ μΈμΆœν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ Piκ°€ 주어진닀. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

 

 

문제 풀이

 

κ°€μž₯ μ‹€ν–‰μ‹œκ°„μ΄ μž‘μ€ jobλΆ€ν„° μˆ˜ν–‰ν•˜λŠ” shortest job first μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  μ‚¬λžŒμ΄ λ™μ‹œμ— μ™€μ„œ μΈμΆœμ„ κΈ°λ‹€λ¦°λ‹€κ³  μƒκ°ν•˜κΈ° λ•Œλ¬Έμ—, μΈμΆœμ— ν•„μš”ν•œ μ‹œκ°„μ΄ κ°€μž₯ μž‘μ€ μ‚¬λžŒλΆ€ν„° μ²˜λ¦¬ν•˜λŠ” 것이 ν•„μš”ν•œ μ‹œκ°„μ˜ 합을 μ΅œμ†Œλ‘œ λ§Œλ“œλŠ” λ°©λ²•μž…λ‹ˆλ‹€. 

 

N개의 인좜 μ‹œκ°„μ„ 벑터 P에 μ €μž₯ν•˜κ³ , μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•΄μ€λ‹ˆλ‹€. 총 μ‹œκ°„μ˜ 합은 P[i]*(N-i)λ₯Ό λͺ¨λ‘ λ”ν•œ κ°’μž…λ‹ˆλ‹€. 예제 μž…λ ₯ 1을 μ˜ˆμ‹œλ‘œ λ“€μžλ©΄ μ˜ˆμ œμ—μ„œ μ •λ ¬λœ P의 값은 [1, 2, 3, 3, 4] μž…λ‹ˆλ‹€.

answer = (1) + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 3) + (1 + 2 + 3 + 3 + 4)

       = (1 * 5) + (2 * 4) + (3 * 3) + (3 * 2) + (4 * 1)

μœ„μ™€ 같이 answerλ₯Ό ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

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

 

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
//11399번: ATM
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int N, answer = 0;
    cin >> N;
    vector<int> P(N);
    for(int i = 0; i < N; i++){
        cin >> P[i];
    }
    sort(P.begin(), P.end());   //Shortest Job First
 
    for(int i = 0; i < N; i++) {
        answer += P[i] * (N-i);
    }
 
    cout << answer;
 
    return 0;
}
cs

 

 

 

 

 

 

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

 

 

728x90