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

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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”„๋กœ์„ธ์Šค - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”„๋กœ์„ธ์Šค - C++

.23 2024. 4. 8. 21:44
๋ฌธ์ œ

์šด์˜์ฒด์ œ์˜ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. ์‹คํ–‰ ๋Œ€๊ธฐ ํ(Queue)์—์„œ ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
2. ํ์— ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐฉ๊ธˆ ๊บผ๋‚ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
3. ๋งŒ์•ฝ ๊ทธ๋Ÿฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐฉ๊ธˆ ๊บผ๋‚ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3.1 ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์‹œ ํ์— ๋„ฃ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ์„ธ์Šค 4๊ฐœ [A, B, C, D]๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ ๋Œ€๊ธฐ ํ์— ๋“ค์–ด์žˆ๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ [2, 1, 3, 2]๋ผ๋ฉด [C, D, A, B] ์ˆœ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‹คํ–‰ ๋Œ€๊ธฐ ํ(Queue)์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”๋„๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด priorities์™€, ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ๊ณ ์‹ถ์€ ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” location์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ
  • priorities์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • priorities์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 9 ์ดํ•˜์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
    • priorities์˜ ์›์†Œ๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ˆซ์ž๊ฐ€ ํด ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.
  • location์€ 0 ์ด์ƒ (๋Œ€๊ธฐ ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ˆ˜ - 1) ์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • priorities์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ์œผ๋ฉด 0, ๋‘ ๋ฒˆ์งธ์— ์žˆ์œผ๋ฉด 1 … ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

 


๋‚ด ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ’€์ž๋งˆ์ž ๋‚จ๊ธฐ๋Š” ๋ฆฌ๋ทฐ

๐Ÿ”— ์ฐธ๊ณ  : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ”„๋กœ์„ธ์Šค

 

์šฐ์„ ์ˆœ์œ„๋ฅผ ์ €์žฅํ•˜๋Š” priority queue์™€ ์šฐ์„ ์ˆœ์œ„์™€ index ์ˆœ์„œ๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” queue ๋‘ ๊ฐ€์ง€๋ฅผ ์„ ์–ธํ•œ ๋’ค, ๊ทœ์น™์— ๋”ฐ๋ผ ์‹คํ–‰๋๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ ์ฐพ๊ณ ์ž ํ•˜๋Š” location์˜ ์ˆœ์„œ๋ฅผ ์„ธ์ค€๋‹ค.

 

 

priority queue์˜ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค(๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค)๋ฅผ queue์—์„œ ์ฐพ๋Š”๋‹ค.

- ๋งŒ์•ฝ queue์˜ ๋งจ ์•ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด,

          ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ€๋ ธ์„ ๊ฒƒ์ด๋ฏ€๋กœ ๋งจ ๋’ค๋กœ ๊ฐ€๋„๋ก queue์—์„œ popํ•ด์ค€ ํ›„ ๋‹ค์‹œ push๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

- ๋งŒ์•ฝ queue์˜ ๋งจ ์•ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋งž๋‹ค๋ฉด,

      - ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜์™€ location์„ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด

          ์‹คํ–‰์ˆœ์„œ๊ฐ€ ๊ทธ ๋’ค์— ํ•ด๋‹นํ•  ๊ฒƒ์ด๋ฏ€๋กœ count++ ํ•ด์ค€ ํ›„, ํ•ด๋‹น ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฏธ ์‹คํ–‰๋˜์—ˆ๋‹ค ๊ฐ€์ •ํ•˜์—ฌ priority queue์—์„œ pop ์ˆ˜ํ–‰

      - ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜์™€ location์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ

          ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ

 

 

์ฝ”๋“œ
#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 1;
    priority_queue<int> pq;
    queue<pair<int, int> > q;

    int len = priorities.size();
    for(int i = 0; i < len; i++) {
        q.push({i, priorities[i]});
        pq.push(priorities[i]);
    }

    int count = 1;
    while(true) {
        pair<int, int> temp = q.front();
        q.pop();

        if(temp.second != pq.top())
            q.push(temp);
        else
            if(temp.first == location) {
                answer = count;
                break;
            }
            else {
                count++;
                pq.pop();
            }
    }
    return answer;
}
Comments