๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ - C++

.23 2022. 2. 17. 17:39
๋ฌธ์ œ

์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์— ์Œ“์—ฌ์„œ FIFO - First In First Out - ์— ๋”ฐ๋ผ ์ธ์‡„๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

  1. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Queue์— 4๊ฐœ์˜ ๋ฌธ์„œ(A B C D)๊ฐ€ ์žˆ๊ณ , ์ค‘์š”๋„๊ฐ€ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์‡„ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ D๋ฅผ ์ธ์‡„ํ•˜๊ณ  A, B๋ฅผ ์ธ์‡„ํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€, ํ˜„์žฌ Queue์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜์™€ ์ค‘์š”๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ด๋–ค ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์—์„œ C๋ฌธ์„œ๋Š” 1๋ฒˆ์งธ๋กœ, A๋ฌธ์„œ๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๊ฒŒ ๋œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‘ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ, ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ Queue์—์„œ ๋ช‡ ๋ฒˆ์งธ์— ๋†“์—ฌ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(0 ≤ M < N)์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ๋งจ ์™ผ์ชฝ์€ 0๋ฒˆ์งธ๋ผ๊ณ  ํ•˜์ž. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐœ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ค‘์š”๋„๋Š” 1 ์ด์ƒ 9 ์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , ์ค‘์š”๋„๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.


STL์˜ ์šฐ์„ ์ˆœ์œ„ ํ์ธ priority_queue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์–ด๋ณด์•˜๋‹ค. priority_queue์—์„œ๋Š” enqueue๋˜๋Š” ๊ฐ’๋“ค์„ ์ •๋ ฌํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ธ๋ฑ์Šค์™€ ์ค‘์š”๋„๋ฅผ ํ•œ๋ฒˆ์— ๋‹ด์„ pair<int, int> ์ž๋ฃŒํ˜•์˜ queue ํ•˜๋‚˜์™€, ์ค‘์š”๋„๋ฅผ ๋‹ด์„ ์šฐ์„ ์ˆœ์œ„ ํ ํ•˜๋‚˜๋ฅผ ์„ ์–ธํ•œ ๋’ค ์ž…๋ ฅํ•ด์ค€ ๋Œ€๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ ๋’ค์— queue๊ฐ€ ๋ชจ๋‘ ๋น„๊ธฐ ์ „๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด ๋•Œ ํ˜„์žฌ ๊ฐ€์žฅ ๋†’์€ ์ค‘์š”๋„๋ณด๋‹ค ์ง€๊ธˆ ๋ฝ‘์„ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ๋” ๋‚ฎ์„ ๊ฒฝ์šฐ ํ˜„์žฌ ๋ฌธ์„œ ์ •๋ณด ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ queue ์ œ์ผ ๋’ค์— pushํ•ด์ค€ ๋’ค ์•ž์—์„œ๋Š” popํ•ด์ฃผ๊ณ , ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ์ง€๊ธˆ ์ถœ๋ ฅํ•œ ๋ฌธ์„œ์˜ ์ˆœ์„œ๊ฐ€ ๋‚ด๊ฐ€ ๋ช‡๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ๋ฌธ์„œ์ธ ๊ฒฝ์šฐ ํ˜„์žฌ ์นด์šดํŠธ๋ฅผ ์ถœ๋ ฅํ•ด์ค€ ๋’ค ์ข…๋ฃŒํ•œ๋‹ค.

 

priority_queue๋ฅผ ํ•œ๋ฒˆ๋„ ์•ˆ์จ๋ดค๋˜์ง€๋ผ STL์„ ์จ๋ณด๊ณ ์‹ถ์–ด์„œ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค..!

 

์ฝ”๋“œ
#include <cstdio>
#include <queue>

using namespace std;

int main(void) {
    int test;

    scanf("%d", &test);
    for(int i = 0; i < test; i++) {
        int N, M;
        scanf("%d %d", &N, &M);
        
        queue<pair<int, int> > print;
        priority_queue<int> check;

        int priority;
        for(int j = 0; j < N; j++) {
            scanf("%d", &priority);
            print.push(make_pair(j, priority));
            check.push(priority);
        }
        
        int count = 0;
        while(!print.empty()) {
            int index = print.front().first;
            int now_priority = print.front().second;

            if(check.top() > now_priority) {
                print.push(print.front());
                print.pop();
            }
            else {
                count++;
                print.pop();
                check.pop();

                if(index == M) {
                    printf("%d\n", count);
                    break;
                }
            }
        }
    }
    return 0;
}
Comments