ABOUT ME

์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹น~ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋Š” https://velog.io/@ows3090 ์— ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Today
Yesterday
Total
  • [Programmers] Lv2.์ˆ˜์‹ ์ตœ๋Œ€ํ™”
    SW Test/Programmers 2020. 9. 1. 20:29
    ๋ฐ˜์‘ํ˜•
    • ์ด ๊ธ€์€ C++๋กœ ํ’€์ด๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค

    ๋ฌธ์ œ


    ์˜ˆ์‹œ


    ํ’€์ด

    #include <string>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    vector<long long> result;
    void findMaxnum(vector<long long> num, vector<char> operation, vector<char> oper, bool check[3]){
    // ์ˆซ์ž ํ•˜๋‚˜๋งŒ ๋‚จ์•˜์„ ๊ฒฝ์šฐ
    if(num.size()==1){
    result.push_back(abs(num[0]));
    }
    // ์ˆซ์ž ํ•˜๋‚˜ ์ด์ƒ ๋‚จ์•˜์„ ๊ฒฝ์šฐ, ์ฆ‰ ์—ฐ์‚ฐ์ด ๋” ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ
    else{
    // ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜๋ฅผ ํ™•์ธํ•˜์—ฌ backtraking์œผ๋กœ ๊ตฌํ˜„
    for(int i=0;i<oper.size();i++){
    if(!check[i]){
    check[i]=true;
    vector<long long> tempnum = num; // ํ˜„์žฌ ์ˆซ์ž ๋ฐฐ์—ด
    vector<long long> newnum; // ๋‚˜์ค‘ ์ˆซ์ž ๋ฐฐ์—ด
    vector<char> newoperation; // ๋‚˜์ค‘ ์—ฐ์‚ฐ ๋ฐฐ์—ด
    // ์—ฐ์‚ฐ ๋ฐฐ์—ด๋“ค์„ ๋ชจ๋‘ ์ˆœํšŒํ•˜์—ฌ ํ˜„์žฌ ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค
    for(int j=0;j<operation.size();j++){
    // ๊ฐ™์„ ๊ฒฝ์šฐ
    // ์—ฐ์‚ฐ์ž์˜ ๊ฐฏ์ˆ˜์— +1๋งŒํผ ์ˆซ์ž ๊ฐฏ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
    // ๋˜ํ•œ ๊ฐ™์€ ์—ฐ์‚ฐ์ž์ผ ๊ฒฝ์šฐ ์•ž์ด ์šฐ์„ ์ˆœ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์•ž ๋ฐฐ์—ด์— ๋‘”๋‹ค.
    if(operation[j] == oper[i]){
    if(oper[i] == '*'){
    tempnum[j+1] = tempnum[j]*tempnum[j+1];
    }
    else if(oper[i] == '-'){
    tempnum[j+1]=tempnum[j]-tempnum[j+1];
    }
    else{
    tempnum[j+1]=tempnum[j]+tempnum[j+1];
    }
    }
    // ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์—ฐ์‚ฐ์ž ๋’ค์— ์žˆ๋Š” ์ˆซ์ž๋Š” ๋” ์ด์ƒ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— newnum ๋ฐฐ์—ด์— ์ถ”๊ฐ€
    // operation๋„ ์—ฐ์‚ฐ์ด ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— newoperation ๋ฐฐ์—ด์— ์ถ”๊ฐ€
    else{
    newnum.push_back(tempnum[j]);
    newoperation.push_back(operation[j]);
    }
    }
    newnum.push_back(tempnum[tempnum.size()-1]); // ๋งˆ์ง€๋ง‰ ์ˆซ์ž ๋„ฃ๊ธฐ
    findMaxnum(newnum,newoperation,oper,check);
    check[i]=false;
    }
    }
    }
    }
    long long solution(string expression) {
    long long answer=0;
    vector<long long> num; // ์ˆซ์ž ๋ฐฐ์—ด
    vector<char> operation; // ์ˆซ์ž์‚ฌ์ด์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์ž ๋ฐฐ์—ด
    vector<char> oper; // ์—ฐ์‚ฐ์ž๋“ค์˜ ์ข…๋ฅ˜ ๋ฐฐ์—ด ( ์ค‘๋ณต x )
    bool check[3]={0}; // dfs๋กœ ์ˆœ์—ด ๊ตฌํ˜„ (next_permutaion์œผ๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅ)
    string str="";
    // expression์„ num, operation, oper ๋ฐฐ์—ด ์ฑ„์šฐ๊ธฐ
    for(int i=0;i<expression.size();i++){
    if(isdigit(expression[i])){
    str+=expression[i];
    }
    else{
    num.push_back(stoi(str));
    str.clear();
    operation.push_back(expression[i]);
    if(find(oper.begin(),oper.end(),expression[i])==oper.end()){
    oper.push_back(expression[i]);
    }
    }
    }
    num.push_back(stoi(str));
    // dfs๋กœ ์ˆœ์—ด๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ™•์ธ
    findMaxnum(num,operation,oper,check);
    answer = *max_element(result.begin(),result.end());
    return answer;
    }
    • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.