본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 21737번 : SMUPC 계산기

반응형

https://www.acmicpc.net/problem/21737

 

21737번: SMUPC 계산기

SMUPC를 기념하기 위해 ALGOS와 DSC Sookmyung에서는 SMUPC의 각 글자로 계산이 이루어지는 계산기를 만들었다. 가은이와 혜민이는 이 계산기와 같은 방식으로 작동하는 프로그램을 만들고자 한다. 가은

www.acmicpc.net

문자열 parsing 후 구현 문제였습니다.

 

 

풀이방법

 1. 숫자는 숫자끼리, 계산명령어는 명령어끼리 parsing해 각각의 vector에 저장했습니다.

 

 2. 명령어의 size만큼 확인하면서 계산을 수행합니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll n, cFlag, output, idx;
string s;
vector <ll> nums;
vector <char> op;

void parsing(){
    string tmp;
    for(ll i = 0; i < s.size(); i++){
        if(s[i] == 'S' || s[i] == 'M' || s[i] == 'U' || s[i] == 'P' || s[i] == 'C' || i == s.size() - 1){
            if(s[i] == 'C') cFlag = 1;
            op.push_back(s[i]);
            if(tmp.size()) nums.push_back(stoi(tmp));
            tmp = "";
            continue;
        }
        tmp += s[i];
    }
}

void operating(){
    output = nums[0];
    for(auto o : op){
        if(o == 'S') output -= nums[++idx];
        else if(o == 'M') output *= nums[++idx];
        else if(o == 'U'){
            if(output < 0) output = -(-output / nums[++idx]);
            else output = output / nums[++idx];
        }
        else if(o == 'P') output += nums[++idx];
        else cout << output << ' ';
    }
}

int main(){
    cin >> n >> s;
    
    parsing();

    if(!cFlag){ cout << "NO OUTPUT"; return 0; }

    operating();
}