[์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ 2021] ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ :: c++ ์ฝ”๋“œ, ๋ฌธ์ œ ํ•ด์„, ํ•„์š” ํ•จ์ˆ˜

๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ

๋‚œ์ด๋„ : โ˜…โ˜…โ˜†โ˜†โ˜†

๊ฑธ๋ฆฐ ์‹œ๊ฐ„ : 50๋ถ„

 

๋ฌธ์ œ

๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ๊ณ ๋ฏผํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ด์ „์— ๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋Š” ์ตœ์†Œ 2๊ฐ€์ง€ ์ด์ƒ์˜ ๋‹จํ’ˆ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ํ›„๋ณด์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์†๋‹˜ 6๋ช…์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ์กฐํ•ฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด,
(๊ฐ ์†๋‹˜์€ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 2๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๋‹จํ’ˆ๋ฉ”๋‰ด๋Š” A ~ Z์˜ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.)

์†๋‹˜ ๋ฒˆํ˜ธ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ
1๋ฒˆ ์†๋‹˜ A, B, C, F, G
2๋ฒˆ ์†๋‹˜ A, C
3๋ฒˆ ์†๋‹˜ C, D, E
4๋ฒˆ ์†๋‹˜ A, C, D, E
5๋ฒˆ ์†๋‹˜ B, C, F, G
6๋ฒˆ ์†๋‹˜ A, C, D, E, H

๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋”ฐ๋ผ ์Šค์นดํ”ผ๊ฐ€ ๋งŒ๋“ค๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ํ›„๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”์Šค ์ข…๋ฅ˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ์„ค๋ช…
์š”๋ฆฌ 2๊ฐœ ์ฝ”์Šค A, C 1๋ฒˆ, 2๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 4๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 3๊ฐœ ์ฝ”์Šค C, D, E 3๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 3๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค B, C, F, G 1๋ฒˆ, 5๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค A, C, D, E 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.

[๋ฌธ์ œ]

๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด orders, ์Šค์นดํ”ผ๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด course๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์Šค์นดํ”ผ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

[์ œํ•œ์‚ฌํ•ญ]

  • orders ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • orders ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ 2 ์ด์ƒ 10 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์—๋Š” ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • course ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 10 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” 2 ์ด์ƒ 10 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์—๋Š” ๊ฐ™์€ ๊ฐ’์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ •๋‹ต์€ ๊ฐ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด์˜ ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ return ํ•ด์ฃผ์„ธ์š”.
    • ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด ๋˜ํ•œ ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด, ๋ชจ๋‘ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • orders์™€ course ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” return ํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ด ๋˜๋„๋ก ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ฝ”๋“œ

#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

// 7:10 ์‹œ์ž‘
// orders <= 20, course <= 10, orders ์›์†Œ ๊ธธ์ด <= 10 (์‹œ๊ฐ„๋ณต์žก๋„ ์ถฉ๋ถ„)
// 2๋ฒˆ ์ด์ƒ ๊ฒน์น˜๋Š” ์ฝ”์Šค๋ฉ”๋‰ด, course์— ์žˆ๋Š” ๊ธธ์ด
// orders๋ฅผ ๋ณด๋ฉด์„œ ๊ฒน์น˜๋Š” ์ฝ”์Šค ๋ฉ”๋‰ด ์ฐพ๊ธฐ (course์— ๋Œ€ํ•ด์„œ๋งŒ)
// => ์ตœ๋Œ€ 20๊ฐœ ๋Œ๋ฉด์„œ include๋กœ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธ => ์ตœ๋Œ€ 10๊ฐœ์˜ course์— ๋Œ€ํ•ด ํ™•์ธ => ์ตœ๋Œ€ 252(10C5)*20*10 < 10^6
// ์ตœ๋Œ€๋กœ ๋จน์€ ๋ฉ”๋‰ด๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋ฏ€๋กœ ์ „์ฒด ๋‹ค ๋”ฐ์ ธ์•ผํ•จ
// result์— ๋„ฃ๊ธฐ (์ˆœ์„œ๋Œ€๋กœ ๋„ฃ์œผ๋‹ˆ๊นŒ ์ž๋™ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ)
// ๋ช‡ ๊ฐœ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์— ์ตœ๋Œ€ ๋ช‡๋ฒˆ ์ฃผ๋ฌธ๋˜์—ˆ๊ณ  ๋ฉ”๋‰ด๊ตฌ์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์ €์žฅํ•ด์•ผํ•จ
// ๊ฐฏ์ˆ˜ => ์ตœ๋Œ€, ๋ฉ”๋‰ด๊ตฌ์„ฑ ์—ฌ๋Ÿฌ๊ฐœ

vector<string> solution(vector<string> orders, vector<int> course) {
    vector<string> answer;
    map<int, int> maxNum; // ๋ฉ”๋‰ด ๊ฐฏ์ˆ˜, ์ตœ๋Œ€๊ฐ’
    map<int, vector<string>> result; // ๋ฉ”๋‰ด ๊ฐฏ์ˆ˜, string๋“ค 

    for(int i=0; i<orders.size(); i++){
        // includes ์‚ฌ์šฉ์„ ์œ„ํ•ด sortํ•ด๋‘๊ธฐ
        sort(orders[i].begin(), orders[i].end());
    }

    for(int i=0; i<course.size(); i++){
        maxNum[course[i]] = 1;
        vector<string> tmp;
        result[course[i]] = tmp;
    }

    while(orders.size()){ // orders ๋Œ๋ฉด์„œ
        string target = orders[0]; orders.erase(orders.begin());
        int t_size = target.size();
        vector<int> tmp(t_size, 0); // ์กฐํ•ฉ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ tmp vector

        for(int i=0; i<course.size(); i++){
            int size = course[i]; // ๋ช‡ ๊ฐœ์˜ ์กฐํ•ฉ์„ ์ฐพ์„ ๊ฑด์ง€ ๊ฒฐ์ •
            if(t_size<size) // ํ˜„์žฌ order์˜ ํฌ๊ธฐ๋ณด๋‹ค ํ•„์š”๋กœํ•˜๋Š” ์กฐํ•ฉ ๊ฐฏ์ˆ˜๊ฐ€ ๋” ํฌ๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ
                continue;

            // ๋’ค๋ถ€ํ„ฐ size๊ฐœ๋งŒํผ 1 ์ฑ„์šฐ๊ธฐ
            // next_permutation ์ ์šฉ์‹œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์–ด์•ผ ํ•จ
            for(int j=t_size-1; j>=t_size-size; j--){
                tmp[j] = 1;
            }

            do{
                string t_string = ""; // ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  string
                for(int j=0; j<tmp.size(); j++){
                    if(tmp[j]==1)
                        t_string += target[j];
                }

                int num = 1; // ๊ฒน์น˜๋Š” ํšŸ์ˆ˜ ์ธก์ •
                for(int j=0; j<orders.size(); j++){ // ํ•ด๋‹น target string์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด์ด orders์— ์žˆ๋Š”์ง€ ํ™•์ธ
                    if(includes(orders[j].begin(), orders[j].end(), t_string.begin(), t_string.end())){
                        // ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉด num ์ฆ๊ฐ€
                        num += 1;
                    }
                }

                if(num == 1) // ๊ฒน์น˜๋Š”๊ฒŒ ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๊ธฐ
                    continue;

                if(maxNum[size]<num){
                    // max๋ณด๋‹ค ํฌ๋ฉด vector ์ดˆ๊ธฐํ™” ๋ฐ ์ถ”๊ฐ€
                    result[size].clear();
                    maxNum[size] = num;
                    result[size].push_back(t_string);
                }else if(maxNum[size]==num){
                    // max์™€ ๊ฐ™์œผ๋ฉด string ์ถ”๊ฐ€
                    result[size].push_back(t_string);
                }
            }while(next_permutation(tmp.begin(), tmp.end())); // ์กฐํ•ฉ ์‚ฌ์šฉ
        }
    }

    // answer ์ถ”์ถœ
    for(int i=0; i<result.size(); i++){
        for(int j=0; j<result[i].size(); j++){
            answer.push_back(result[i][j]);
        }
    }

    // ์ •๋ ฌ
    sort(answer.begin(), answer.end());

    return answer;
}

// 8:20 ๋ => 1์‹œ๊ฐ„

 

ํ’€์ด

// 7:10 ์‹œ์ž‘
// orders <= 20, course <= 10, orders ์›์†Œ ๊ธธ์ด <= 10 (์‹œ๊ฐ„๋ณต์žก๋„ ์ถฉ๋ถ„)
// 2๋ฒˆ ์ด์ƒ ๊ฒน์น˜๋Š” ์ฝ”์Šค๋ฉ”๋‰ด, course์— ์žˆ๋Š” ๊ธธ์ด
// orders๋ฅผ ๋ณด๋ฉด์„œ ๊ฒน์น˜๋Š” ์ฝ”์Šค ๋ฉ”๋‰ด ์ฐพ๊ธฐ (course์— ๋Œ€ํ•ด์„œ๋งŒ)
// => ์ตœ๋Œ€ 20๊ฐœ ๋Œ๋ฉด์„œ include๋กœ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธ => ์ตœ๋Œ€ 10๊ฐœ์˜ course์— ๋Œ€ํ•ด ํ™•์ธ => ์ตœ๋Œ€ 252(10C5)*20*10 < 10^4
// ์ตœ๋Œ€๋กœ ๋จน์€ ๋ฉ”๋‰ด๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋ฏ€๋กœ ์ „์ฒด ๋‹ค ๋”ฐ์ ธ์•ผํ•จ
// result์— ๋„ฃ๊ธฐ (์ˆœ์„œ๋Œ€๋กœ ๋„ฃ์œผ๋‹ˆ๊นŒ ์ž๋™ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ)
// ๋ช‡ ๊ฐœ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์— ์ตœ๋Œ€ ๋ช‡๋ฒˆ ์ฃผ๋ฌธ๋˜์—ˆ๊ณ  ๋ฉ”๋‰ด๊ตฌ์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์ €์žฅํ•ด์•ผํ•จ
// ๊ฐฏ์ˆ˜ => ์ตœ๋Œ€, ๋ฉ”๋‰ด๊ตฌ์„ฑ ์—ฌ๋Ÿฌ๊ฐœ

์šฐ์„  ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ๋ณด์ž. ๋‹ค 10 ์–ธ์ €๋ฆฌ์˜€์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ทธ๋ ‡๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋  ๋“ฏํ•˜๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ’€์ง€ ์ƒ๊ฐํ•ด๋ณด์ž.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋ฌธ์ œ์—์„œ๋Š” course์— ๋“ค์–ด์žˆ๋Š” ๊ฐฏ์ˆ˜๋งŒํผ์˜ ์ฝ”์Šค๋ฉ”๋‰ด ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ๊ฒน์น˜๋Š” ์ฝ”์Šค๋ฅผ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์ƒ๊ฐํ•œ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • course์—์„œ ์ œ์•ˆํ•œ ๊ฐฏ์ˆ˜(n)์˜ ์ฝ”์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.
    • orders๋ฅผ ํ•˜๋‚˜์”ฉ ๋ณด๋ฉด์„œ n๊ฐœ์˜ ์Œ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์กฐํ•ฉ(๋ฉ”๋‰ด ์กฐํ•ฉ)์„ ์ถ”์ถœํ•œ๋‹ค.
      • next_permutation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋‰ด ์กฐํ•ฉ์„ ์ถ”์ถœํ•˜์ž.
    • ์ถ”์ถœํ•œ ๋ฉ”๋‰ด ์กฐํ•ฉ์ด ๋‹ค๋ฅธ order์—๋„ ์žˆ๋Š”์ง€, ๋ช‡ ๋ฒˆ ๊ฒน์น˜๋Š” ์ง€ ์กฐ์‚ฌํ•œ๋‹ค.
      • include๋กœ ์กฐ์‚ฌํ•˜์ž.
    • ๊ฒน์น˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๊ธฐ์กด ์กฐํ•ฉ๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด ๊ฐฑ์‹ ํ•œ๋‹ค.
      • ์ €์žฅํ•ด์•ผํ•  ๊ฒƒ์€ (๋ช‡ ๊ฐœ์˜ ์Œ์‹์„ ์กฐํ•ฉํ•  ์ง€(courseNum), ๊ฐ€์žฅ ๋งŽ์ด ๊ฒน์น˜๋Š” ์ˆซ์ž(max), ์ฝ”์Šค๋ฉ”๋‰ด๋“ค(vector<string>)) ์ด๋‹ค.
      • ์ด๋ฅผ ๋™์‹œ์— ๊ตฌ์„ฑํ•˜๊ธฐ๋Š” ํž˜๋“ค ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๋‘๊ฐ€์ง€ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„์ž.
      • (courseNum, max)์™€ (courseNum, vector<string>)์„ ๊ฐ๊ฐ map์œผ๋กœ ๋งŒ๋“ค๋ฉด courseNum์œผ๋กœ ์ ‘๊ทผํ•˜๊ธฐ ํŽธํ•  ๋“ฏ ํ•˜๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด course๋ฅผ ๋„๋Š” ๋ฐ˜๋ณต๋ฌธ(10) ์•ˆ์— orders๋ฅผ ๋„๋Š” ๋ฐ˜๋ณต๋ฌธ(20) ์•ˆ์— n๊ฐœ์˜ ์กฐํ•ฉ์„ ์ฐพ๋Š” ๋ฐ˜๋ณต๋ฌธ(์ตœ๋Œ€ 45) ์•ˆ์— ๊ฒน์น˜๋Š” ์ฝ”์Šค๊ฐ€ ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ(20) ์ด ์žˆ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” 10^5๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

 

์ฑ„์  ๊ฒฐ๊ณผ

 

์ฃผ์˜ํ•  ๊ฒƒ

  • algorithm ์— ์žˆ๋Š” includes ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜€๋‘์ž.
    • includes(begin, end, begin2, end2)
    • begin, end๊ฐ€ begin2, end2๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
    • boolean์œผ๋กœ ๋ฐ˜ํ™˜
  • next_permutation ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜€๋‘์ž.
    • next_permutation(begin, end)
    • boolean์œผ๋กœ ๋ฐ˜ํ™˜
๋ฐ˜์‘ํ˜•