Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ํ”„๋ฆฐํ„ฐ ํ’€์ด

meeeeejin 2020. 8. 16. 16:17

๋ฌธ์ œ

 

<๋ฌธ์ œ ์„ค๋ช…>

 

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

 

  1. ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ(J)๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
  2. ๋‚˜๋จธ์ง€ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ J๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•œ ๊ฐœ๋ผ๋„ ์กด์žฌํ•˜๋ฉด J๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
  3. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด J๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

 

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

๋‚ด๊ฐ€ ์ธ์‡„๋ฅผ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ C๋Š” 1๋ฒˆ์งธ๋กœ, A๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

 

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

 

 

 

<์ œํ•œ์‚ฌํ•ญ>

  • ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์—๋Š” 1๊ฐœ ์ด์ƒ 100๊ฐœ ์ดํ•˜์˜ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ์‡„ ์ž‘์—…์˜ ์ค‘์š”๋„๋Š” 1~9๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ์ค‘์š”ํ•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
  • location์€ 0 ์ด์ƒ (ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๋Š” ์ž‘์—… ์ˆ˜ - 1) ์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ์œผ๋ฉด 0, ๋‘ ๋ฒˆ์งธ์— ์žˆ์œผ๋ฉด 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

<์ž…์ถœ๋ ฅ ์˜ˆ>


priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

 

 

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

 

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

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

programmers.co.kr

 

 

 

๋ฌธ์ œ ํ’€์ด

 

๋ฌธ์„œ์˜ ๋Œ€๊ธฐ๋ชฉ๋ก์„ ํ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ์—๋Š” ๊ฐ ๋ฌธ์„œ์˜ (์œ„์น˜, ์ค‘์š”๋„)๊ฐ€ pair๋กœ ์ €์žฅ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ฐ€์žฅ ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ์ œ์ผ ๋จผ์ € ์ถœ๋ ฅ๋˜๊ณ , ๋งŒ์•ฝ ์ค‘์š”๋„๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋Œ€๊ธฐ๋ชฉ๋ก์— ์•ž์— ์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ priorities๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋’ค์— ์˜ค๋Š” ์ค‘์š”๋„๋ฅผ ๊ฐ€์ง„ ๋ฌธ์„œ๋ถ€ํ„ฐ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. 

 

 

1. docs๋ผ๋Š” ํ์— ๋Œ€๊ธฐ๋ชฉ๋ก ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ๋ฌธ์„œ์˜ (์œ„์น˜, priorities) ์‚ฝ์ž…ํ•˜๊ธฐ

2. priorities ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ (๊ฐ€์žฅ ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๊ฒƒ์ด ๋’ค๋กœ)

3. priorities์˜ ์›์†Œ๊ฐ€ ์กด์žฌํ•  ๋•Œ ๋‹ค์Œ์„ ๋ฐ˜๋ณต

   1) ๊ฐ€์žฅ ๋†’์€ ์ค‘์š”๋„(highest) ์ฐพ๊ธฐ

   2) ๋Œ€๊ธฐ๋ชฉ๋ก ๋งจ ์•ž ๋ฌธ์„œ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•  ๊ฒฝ์šฐ

       => ๋ฌธ์„œ ์ถœ๋ ฅ; ๋งŒ์•ฝ ์ฐพ๊ณ  ์žˆ๋Š” ๋ฌธ์„œ์ผ ๊ฒฝ์šฐ ์ •๋‹ต ๋ฐ˜ํ™˜

   3) 2)์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ

       => ๋ฌธ์„œ๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก ๋งจ ๋’ค๋กœ ๋ณด๋ƒ„

   4) ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ๊นŒ์ง€ 2), 3) ๋ฐ˜๋ณต

   5) ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด priorities์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ค‘์š”๋„ ์‚ญ์ œ

 

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
 
using namespace std;
 
int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<pair<intint>> docs;    // ๊ฐ ๋ฌธ์„œ์˜ (์œ„์น˜, ์ค‘์š”๋„) ์ €์žฅ
 
    for (int i = 0; i < priorities.size(); i++) {
        docs.push(pair<intint>(i, priorities[i]));
    }
    
    sort(priorities.begin(), priorities.end());
 
    while (!priorities.empty()) {
        int highest = priorities.back();    // ๋‚จ์€ ๋ฌธ์„œ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์ค‘์š”๋„
        pair<intint> temp;
 
        while (1) {
            // ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ค‘์š”๋„๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ
            if (docs.front().second == highest) {
                answer++;
                if (docs.front().first == location)
                    return answer;
                docs.pop();
                break;
            }
            // ๋Œ€๊ธฐ ๋ชฉ๋ก์— ๋” ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
            else {
                temp = docs.front();
                docs.pop();
                docs.push(temp);
            }
        }
 
        priorities.pop_back();
    }
 
    return answer;
}
cs

 

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ

 

 

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

728x90