ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 수식 최대화
    문제 풀이 2020. 9. 26. 18:42

    수식 최대화



    문제)

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


    풀이)

    next_permutation으로 연산자의 우선순위를 바꿔주면서 푼 문제이다.


    #include <string> #include <vector> #include <algorithm> using namespace std; bool cardi[3];// + - * long long solution(string expression) { long long answer = 0; vector <long long> number; vector <int> oper; string s; for (int i = 0; i < expression.length(); i++) { char ch = expression[i]; if (ch == '+') { cardi[0] = true; oper.push_back(0); number.push_back(stoi(s)); s = ""; } else if (ch == '-') { cardi[1] = true; oper.push_back(1); number.push_back(stoi(s)); s = ""; } else if (ch == '*') { cardi[2] = true; oper.push_back(2); number.push_back(stoi(s)); s = ""; } else s += ch; } number.push_back(stoi(s)); vector <int> priority; for (int i = 0; i < 3; i++) { if (cardi[i]) { priority.push_back(i); } } do { vector <long long> t_number = number; vector <int> t_oper = oper; long long temp; for (int i = 0; i < priority.size(); i++) { int o = priority[i]; for (int j = 0; j < t_oper.size(); j++) { if (t_oper[j] == o) { if (o == 0) {//+ t_number[j] = t_number[j] + t_number[j + 1]; } else if (o == 1) {//- t_number[j] = t_number[j] - t_number[j + 1]; } else {//* t_number[j] = t_number[j] * t_number[j + 1]; }

    t_number.erase(t_number.begin() + j + 1);

    t_oper.erase(t_oper.begin() + j--);//j 줄여줌. 연산자 개수 하나줄었으므로 } } } if (t_number[0] < 0) t_number[0] *= -1; if (answer < t_number[0]) answer = t_number[0]; } while (next_permutation(priority.begin(), priority.end())); return answer; }



    + 숫자와 연산자 저장할 때 substr을 이용한 간단한 방법


    int idx = 0; for(int i=0;i<expression.length();i++){ char ch = expression[i]; if(ch == '*' | ch == '+' | ch == '-'){ oper.push_back(ch); number.push_back(stoi(expression.substr(idx,i-idx))); idx = i+1; }else if(i == expression.size()-1){ number.push_back(stoi(expression.substr(idx,i-idx+1))); } }



    + next_permutation을 사용하지 말고 그냥 연산자 우선순위를 따로 저장해서 사용하는 방법(연산자 3개를 default로 둔다)


     string prior[6] = {
            "*+-", "*-+",
            "+*-", "+-*", 
            "-*+", "-+*",
        };


    '문제 풀이' 카테고리의 다른 글

    [프로그래머스] 캠핑  (0) 2020.09.29
    [프로그래머스] 보석 쇼핑  (0) 2020.09.28
    [프로그래머스] 경주로 건설  (0) 2020.09.25
    [프로그래머스] 동굴 탐험  (0) 2020.09.24
    [프로그래머스] 단어 퍼즐  (0) 2020.09.23

    댓글

Designed by Tistory.