๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2] : ํ”„๋ฆฐํ„ฐ

by Jaeguk 2022. 6. 15.
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/42587

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ”„๋ฆฐํ„ฐ

์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ๋‚˜์ค‘์— ์ธ์‡„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ธ์‡„ํ•˜๋Š” ํ”„๋ฆฐ

programmers.co.kr

์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ๋ฌธ์„œ๋“ค์˜ ๋Œ€๊ธฐ๋ชฉ๋ก์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ถœ๋ ฅ๋ ์ง€ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ.

ํ’€์ด
  • ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฃผ์–ด์ง„ priorities๋ฅผ ์šฐ์„ ์ˆœ์œ„์ด์ž ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์ด๋ผ ํ–ˆ์„ ๋•Œ, ๋Œ€๊ธฐ๋ชฉ๋ก ์ œ์ผ ์•ž. ์ฆ‰, 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ P๋ผ๊ณ  ํ•˜์ž.

 1๋ฒˆ์งธ ๋ฌธ์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋ฌธ์„œ๊นŒ์ง€ ์ค‘์—์„œ

1. P๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์ด ์—†์œผ๋ฉด 0๋ฒˆ์งธ์— ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•œ๋‹ค.

2. P๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค๋ฉด 0๋ฒˆ์งธ์— ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.

์ผ๋‹จ ์ด๊ฒŒ ๊ธฐ๋ณธ์ ์ธ ๊ทœ์น™์ด๋‹ค.

 

 ์ฃผ์–ด์ง„ location์€ ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์•Œ๊ณ  ์‹ถ์€ ๋ฌธ์„œ์˜ ์ธ๋ฑ์Šค์ด๋‹ค. 0๋ฒˆ์งธ ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜๊ฑฐ๋‚˜ ๋งจ ๋’ค๋กœ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค location์€ ํ•˜๋‚˜์”ฉ ์ค„์–ด๋“ ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ location์ด 0์ด๋œ ์‹œ์ ์ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•  ์ฐจ๋ก€๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค.

1. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด. ์ฆ‰, ๋Œ€๊ธฐ๋ชฉ๋ก์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ๋ฌธ์„œ๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋•Œ์˜ answer๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

2. ๋ฐ˜๋Œ€๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ด ๋ฌธ์„œ๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ด์•ผํ•˜๋ฏ€๋กœ

location = ๋‚จ์•„์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜ - 1์ด ๋œ๋‹ค. ์ฆ‰, priorites.size() - 1 ์ด ๋œ๋‹ค.(์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ)

์ด ๊ณผ์ •์„ location์ด 0์ด ๋œ ์‹œ์ ์— ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

  • 0๋ฒˆ์งธ ๋ฌธ์„œ๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋” ํฐ ๋ฌธ์„œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‚˜๋Š” lower_bound ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

lower_bound ํ•จ์ˆ˜๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ๋‚ด๊ฐ€ ์ •ํ•œ ๊ธฐ์ค€๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์ด ์ฒ˜์Œ์œผ๋กœ ๋ฐœ๊ฒฌ๋œ ์ง€์ ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฆฌํ„ด๊ฐ’์ด end()์™€ ๊ฐ™๋‹ค๋ฉด ๊ธฐ์ค€๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์ด ๋ฒกํ„ฐ๋‚ด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.

0๋ฒˆ์งธ ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„ + 1์„ ๊ธฐ์ค€์œผ๋กœ lower_bound() ์˜ ๋ฆฌํ„ด๊ฐ’์ด end()์™€ ๊ฐ™๋‹ค๋ฉด 0๋ฒˆ์งธ ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค๋Š” ๋œป์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  lower_bound ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ๋ฒกํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์„ ์ •๋ ฌ์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์–ด์„œ temp๋ผ๋Š” ๋ฒกํ„ฐ์— ๊ฐ’์„ ๋ณต์‚ฌํ•œ ๋‹ค์Œ temp๋ฅผ ์ •๋ ฌ์‹œ์ผœ์คฌ๋‹ค.

  • ์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
int solution(vector<int> priorities, int location) {
    int answer = 0;
    while(true){
        vector<int> temp = priorities;
        sort(temp.begin(),temp.end());
        if(lower_bound(temp.begin(), temp.end(), priorities[0+ 1)
           == temp.end())
        {
            //๋’ค์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ๋ฌธ์„œ๊ฐ€ ์—†์Œ
            //๋งจ ์•ž์˜ ๋ฌธ์„œ ์ถœ๋ ฅ
            answer++;
            if(location == 0)
                break;
            priorities.erase(priorities.begin());
        }
        else{
            int temp = priorities[0];
            priorities.push_back(temp);
            priorities.erase(priorities.begin());
        }
        location--;
        if(location == -1)
            location = priorities.size()-1;
    }
    return answer;
}
cs

 

์ •๋‹ต ์ œ์ถœ ํ›„, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ max_element๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ์•Œ๊ฒŒ๋๋‹ค.

max_element๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์–ป๊ณ ์‹ถ๋‹ค๋ฉด ์ดํ„ฐ๋ ˆ์ดํ„ฐ์— *์„ ๋ถ™์—ฌ์„œ *max_element() ๋ผ๊ณ  ํ•˜๋ฉด๋œ๋‹ค.

0๋ฒˆ์งธ ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋Œ€๊ธฐ๋ชฉ๋ก ๋‚ด์—์„œ ๊ฐ€์žฅ ํฌ๋‹ค๋ฉด 0๋ฒˆ์งธ ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•œ๋‹ค.

priorities.begin() == max_element(priorities.begin(), priorities.end()) ๋ผ๋ฉด ์ถœ๋ ฅ.

728x90