๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ํ”„๋กœ์„ธ์Šค (์Šคํƒ,ํ - L2) ๋ณธ๋ฌธ

CS/๋ฐฑ์ค€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ํ”„๋กœ์„ธ์Šค (์Šคํƒ,ํ - L2)

๊ฐ•์˜์„œ 2023. 11. 17. 15:49

์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ ์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ๋‹ค.

๋‹จ, ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ์ฒ˜์Œ์—๋Š” ์šฐ์„ ์ˆœ์œ„ ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์•ผํ•˜๋‚˜? ์‹ถ์—ˆ๋Š”๋ฐ, 

๋ง‰์ƒ ์›ํ•˜๋Š” location์˜ ๊ฐ’์ด ์–ธ์ œ ๋‚˜์˜ค๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์›๋ž˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ location์—์„œ ์ง€์ •ํ•ด๋‘” index๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์ˆœ์„œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ๋‹ค.

 

 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ฐ€์žฅ ์ง๊ด€์ ์ด๊ฒŒ ๋‹ค๊ฐ€์˜จ ๋ฐฉ๋ฒ•์€ ์ด ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<int> priorities, int location) {
    
    int answer = 0;
    queue<int> q;
    
    // queue ์ž๋ฃŒ๊ตฌ์กฐ
    for(int i = 0; i < priorities.size(); i++) q.push(priorities[i]);
    
    //์šฐ์„ ์ˆœ์œ„๋ฅผ ์œ„ํ•ด์„œ ์ •๋ ฌ ํ›„, ํ•ด๋‹น ์ˆซ์ž๊ฐ€ popํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…
    sort(priorities.begin(), priorities.end());
    
    int Aidx = location;
    
    while(true){
        
        //๋งจ ์•ž ์นœ๊ตฌ๊ฐ€ priority์— ๋งž์ถฐ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€
        //ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„์™€ ๋™์ผํ•œ์ง€, ๋™์ผ ํ•˜๋ฉด pop
        if(q.front() == priorities.back()){
        
            answer++; 
            
            //๊ทผ๋ฐ ์ด๋ฒˆ์— ๋‚˜์˜ค๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜€์„ ๊ฒฝ์šฐ
            //(ํฌ์ธํ„ฐ ๊ฐœ๋…์œผ๋กœ ๊ณ„์† ๋”ฐ๋ผ๊ฐ€๊ฒŒ๋” ํ• ๊ฑฐ์ž„)
            if(Aidx == 0) break;
            
            priorities.pop_back(); //์šฐ์„ ์ˆœ์œ„ ํ•จ์ˆ˜ pop
            q.pop();             //queue ์•ž๋„ pop
            
            // ์•„๋‹ ๊ฒฝ์šฐ์—๋Š” pop๋งŒ ์ง„ํ–‰ํ•จ <- ํ•„์š” ์—†์„ ์ˆ˜๋„ ์žˆ์Œ
            Aidx--; if(Aidx < 0) Aidx = q.size()-1;
        }
        
        //์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋’ค๋กœ ๋‹ค์‹œ ๋„ฃ๊ธฐ
        else{
            int temp = q.front();
            q.pop();
            q.push(temp);
            
            // ์•„๋‹ ๊ฒฝ์šฐ์—๋Š” pop๋งŒ ์ง„ํ–‰ํ•จ <- ํ•„์š” ์—†์„ ์ˆ˜๋„ ์žˆ์Œ
            Aidx--; if(Aidx < 0) Aidx = q.size()-1;
        }
    }
    
    return answer;
}

 

์‹œ๊ฐ„ ๊ฒฐ๊ณผ