λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/BOJ

[C++/BOJ] 1417 : κ΅­νšŒμ˜μ› μ„ κ±° (자료ꡬ쑰)

728x90

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

문제

λ‹€μ†œμ΄λŠ” μ‚¬λžŒμ˜ λ§ˆμŒμ„ 읽을 수 μžˆλŠ” 기계λ₯Ό 가지고 μžˆλ‹€. λ‹€μ†œμ΄λŠ” 이 기계λ₯Ό μ΄μš©ν•΄μ„œ 2008λ…„ 4μ›” 9일 κ΅­νšŒμ˜μ› μ„ κ±°λ₯Ό μ‘°μž‘ν•˜λ €κ³  ν•œλ‹€.

λ‹€μ†œμ΄μ˜ κΈ°κ³„λŠ” 각 μ‚¬λžŒλ“€μ΄ λˆ„κ΅¬λ₯Ό 찍을 지 미리 읽을 수 μžˆλ‹€. μ–΄λ–€ μ‚¬λžŒμ΄ λˆ„κ΅¬λ₯Ό 찍을 지 μ •ν–ˆμœΌλ©΄, λ°˜λ“œμ‹œ μ„ κ±°λ•Œ κ·Έ μ‚¬λžŒμ„ μ°λŠ”λ‹€.

ν˜„μž¬ ν˜•νƒκ΅¬μ— λ‚˜μ˜¨ κ΅­νšŒμ˜μ› ν›„λ³΄λŠ” Nλͺ…이닀. λ‹€μ†œμ΄λŠ” 이 기계λ₯Ό μ΄μš©ν•΄μ„œ κ·Έ λ§ˆμ„μ˜ μ£Όλ―Ό Mλͺ…μ˜ λ§ˆμŒμ„ λͺ¨λ‘ μ½μ—ˆλ‹€.

λ‹€μ†œμ΄λŠ” 기호 1λ²ˆμ΄λ‹€. λ‹€μ†œμ΄λŠ” μ‚¬λžŒλ“€μ˜ λ§ˆμŒμ„ μ½μ–΄μ„œ μžμ‹ μ„ 찍지 μ•ŠμœΌλ €λŠ” μ‚¬λžŒμ„ 돈으둜 λ§€μˆ˜ν•΄μ„œ κ΅­νšŒμ˜μ›μ— 당선이 되게 ν•˜λ €κ³  ν•œλ‹€. λ‹€λ₯Έ λͺ¨λ“  μ‚¬λžŒμ˜ λ“ν‘œμˆ˜ λ³΄λ‹€ λ§Žμ€ λ“ν‘œμˆ˜λ₯Ό κ°€μ§ˆ λ•Œ, κ·Έ μ‚¬λžŒμ΄ κ΅­νšŒμ˜μ›μ— λ‹Ήμ„ λœλ‹€.

예λ₯Ό λ“€μ–΄μ„œ, λ§ˆμŒμ„ 읽은 κ²°κ³Ό κΈ°ν˜Έ 1번이 5ν‘œ, 기호 2번이 7ν‘œ, 기호 3번이 7ν‘œ 라고 ν•œλ‹€λ©΄, λ‹€μ†œμ΄λŠ” 2번 후보λ₯Ό 찍으렀고 ν•˜λ˜ μ‚¬λžŒ 1λͺ…κ³Ό, 3번 후보λ₯Ό 찍으렀고 ν•˜λ˜ μ‚¬λžŒ 1λͺ…을 돈으둜 λ§€μˆ˜ν•˜λ©΄, κ΅­νšŒμ˜μ›μ— 당선이 λœλ‹€.

돈으둜 λ§€μˆ˜ν•œ μ‚¬λžŒμ€ λ°˜λ“œμ‹œ λ‹€μ†œμ΄λ₯Ό μ°λŠ”λ‹€κ³  κ°€μ •ν•œλ‹€.

λ‹€μ†œμ΄κ°€ λ§€μˆ˜ν•΄μ•Όν•˜λŠ” μ‚¬λžŒμ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 ν›„λ³΄μ˜ 수 N이 주어진닀. λ‘˜μ§Έ 쀄뢀터 μ°¨λ‘€λŒ€λ‘œ 기호 1λ²ˆμ„ 찍으렀고 ν•˜λŠ” μ‚¬λžŒμ˜ 수, 기호 2λ²ˆμ„ 찍으렀고 ν•˜λŠ” 수, μ΄λ ‡κ²Œ 총 N개의 쀄에 걸쳐 μž…λ ₯이 λ“€μ–΄μ˜¨λ‹€. N은 50보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄κ³ , λ“ν‘œμˆ˜λŠ” 100보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 λ‹€μ†œμ΄κ°€ λ§€μˆ˜ν•΄μ•Ό ν•˜λŠ” μ‚¬λžŒμ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.


 

싀버5.

κ°€μž₯ ν‘œκ°€ λ§Žμ€ μ‚¬λžŒμ—κ²Œμ„œ ν‘œλ₯Ό λΊμ–΄μ˜€λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ λ– μ˜¬λ¦΄ 수만 μžˆλ‹€λ©΄,

μš°μ„ μˆœμœ„νλ‘œ ν‘ΈλŠ” 방법이 κ°€μž₯ κ°„λ‹¨ν•˜λ‹€.

 

 

λ‚˜μ˜ 풀이

#include <iostream>
#include <string>
#include <queue>
#include <vector>
using namespace std;

int main(){
    int n;
    priority_queue<int> pq; // top값이 κ°€μž₯ 큼
    int x;
    int ans = 0;

    cin >> n;
    if(n<=1) {
        cout << 0;
        return 0;
    }
    int first;
    cin >> first;
    for (int i = 1; i < n; ++i){
        cin >> x;
        pq.push(x);
    }
    while(pq.top() >= first && !pq.empty()){
        int tmp = pq.top();
        pq.pop();
        tmp -= 1;
        pq.push(tmp);
        ans++;
        first++;
    }
    cout << ans;
    return 0;
}

 

728x90