๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆœ์œ„ ๊ฒ€์ƒ‰ 2021 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ํ…Œ์ŠคํŠธ level2

by Jouureee 2021. 4. 28.

๋ฌธ์ œ : 

programmers.co.kr/learn/courses/30/lessons/72412

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆœ์œ„ ๊ฒ€์ƒ‰

["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt

programmers.co.kr

๋ถ„์„ :

์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์˜€๋‹ค. 

(์นด์นด์˜ค์—์„  ํ•ญ์ƒ 1๋ฌธ์ œ์”ฉ ๋ฌธ์ž์—ด ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ๋‚ด๋Š”๊ฒƒ ๊ฐ™๋‹ค)

 

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ info์™€ query ๋ฐฐ์—ด์€ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋˜์–ด ์žˆ์–ด์„œ 2์ฐจ์› ๋ฐฐ์—ด๋กœ token ๋‹จ์œ„ ๋งˆ๋‹ค ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์ ์ˆ˜์— ๋Œ€ํ•ด์„  intํ˜• vector์— ๊ฐ๊ฐ ๋ฐ›์•˜๋‹ค.

ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„  0์ ์„ ๋ฐ›์•˜์œผ๋‹ˆ ์ด๋ ‡๊ฒŒ ํ‘ผ ์‚ฌ๋žŒ๋„ ์žˆ๊ตฌ๋‚˜ .. ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„ ์ข‹๋‹ค ํ•˜ํ•˜

 

sstream์œผ๋กœ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ๋žŒ์„ ๊ธฐ์ค€์œผ๋ก  set๋ฐฐ์—ด์— ๋‹ด์•˜๊ณ  query์— ๋Œ€ํ•ด์„  vector์— ๋‹ด์•˜๋‹ค. 

๊ทธ๋ ‡๊ฒŒ ๋‹ด์€ ๋’ค์— for๋ฌธ์„ 3๊ฐœ๋‚˜ ๋ˆ๋‹ค 

์ฒซ๋ฒˆ์งธ for๋ฌธ์€ query์˜ ์ˆ˜๋งŒํผ, ๋‘๋ฒˆ์งธ for๋ฌธ์€ ํ•œ query๋‹น ๊ฒ€์‚ฌํ•  ์‚ฌ๋žŒ์„ ๋Œ€์‘์‹œ์ผฐ๊ณ  ์„ธ๋ฒˆ์งธ for๋ฌธ์€ ๊ฒ€์‚ฌํ•  ์‚ฌ๋žŒ๋‹น query์˜ ํ† ํฐ์„ ๋Œ€์‘์‹œ์ผœ ์„ธ๋ฒˆ์งธ for๋ฌธ์˜ token์„ ๋ชจ๋‘ ํ†ต๊ณผํ•œ ์‚ฌ๋žŒ์— ๋Œ€ํ•ด cnt๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ j์‚ฌ๋žŒ๋งŒํผ ์ด 6 ์‚ฌ๋žŒ ๊ฒ€์‚ฌ ์‹œํ‚จ ๋’ค์˜ cnt ๊ฐ’์„ answer vector์— ๋‹ด์•˜๋‹ค. 

 

์ฒ˜์Œ์— ๊ณ ์ƒํ–ˆ๋˜๊ฒŒ for๋ฌธ์˜ ๋œป์„ ์ง์ž‘ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๊ณ  ๋‘๋ฒˆ์งธ ๊ณ ์ƒํ–ˆ๋˜ ๋ถ€๋ถ„์€ isCondition = false ๋ฐ‘์— else isCondition = true๋ฅผ ๋‹ฌ์•„ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ ์กฐ๊ฑด๋ฌธ์—์„œ true๊ฐ€ ๋˜์–ด ๋‹ค์Œ token ๊ฒ€์‚ฌํ•˜๊ณ  ๋‚˜์„œ true๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ์ ์—์„œ ์• ๋จน์—ˆ๋‹ค โ˜น๏ธ 

 

์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๊ณ  ์ข‹์€ ์ฝ”๋“œ๋„ ์•„๋‹Œ๋ฐ ์•ž์œผ๋กœ ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด ๋ด์•ผ๊ฒ ๋‹ค 

 

 

c++ ์ฝ”๋“œ :

#include <stdio.h>
#include <iostream>
#include <vector>
#include <sstream>
#include <set>

using namespace std;

set<string> memberSet[50001];
vector<int> memberScore; // ์ ์ˆ˜ ๋ณด๊ด€์šฉ

vector<string> searchQuery[50001];
vector<int> searchScore;

vector<int> solution(vector<string> info, vector<string> query) {
     vector<int> answer;
     for(int i = 0; i< info.size(); i++){
        string s = info[i];
        stringstream ss(s);
        string str;
        int j =0;
        while(ss>>str){
            j++;
            if(j == 5){
                memberScore.push_back(stoi(str));
                continue;
            }
            memberSet[i].insert(str);
        }
    }
    
    for(int i = 0; i < query.size(); i++){
        string s = query[i];
        stringstream ss(s);
        string str;
        int j = 0;
        while(ss>>str){
            j++;
            if(str == "and"){
                continue;
            }
            if(j == 8){
                searchScore.push_back(stoi(str));
                continue;
            }
            
            searchQuery[i].push_back(str);
        }
    }
    
     for(int i = 0; i < (int)query.size(); i++){ // query index 6
        int cnt = 0;
        
        for(int j = 0; j < (int)info.size(); j++){ // person index 6
            bool isCondition = true;
            for(int k = 0; k < (int)memberSet[j].size() + 1; k++){
                if(k == 4){
                    if(memberScore.at(j) < searchScore.at(i)){
                        isCondition = false;
                        break;
                    }
                }else { //k<=3
                    string queryWord = searchQuery[i][k];
                    set<string>:: iterator iter;
                    if(queryWord == "-"){
                        continue;
                    }else{
                        iter = memberSet[j].find(queryWord);
                        if(iter == memberSet[j].end()){
                            isCondition = false;
                        }
                    }
                }
            }
            
            if(isCondition == true){
                cnt++;
            }
        }
        answer.push_back(cnt);
    }
    return answer;
}

 

๊ฒฐ๊ณผ :

๋Œ“๊ธ€