각 케이스별로 객체를 만들어 입력으로 받은 두개의 스트링을 받아서
생성자에서 자료처리에 알맞게 초기화합니다.
처리할 문자열을 하나씩 받아서 여는 괄호면 스택에 해당 인덱스를 넣습니다.
닫는 괄호일 때 현재 처리중인 닫는 괄호와 스택 탑의 여는 괄호를 비교해 일치하면 옳바른 문자이므로 스택에서 팝합니다.
두 괄호가 다르다면 mismatched 경우이므로 둘의 우선순위를 비교해 더 높은 우선순위를 갖는 괄호로 맞추어줍니다.
get_pair 함수는 닫는 괄호를 입력으로 받아 해당 여는 괄호를 리턴합니다.
get_higher_priority 함수는 여는 괄호를 입력으로 받아 우선순위를 비교하고 해당하는 닫는 괄호를 리턴합니다.
소스코드입니다.
#include <iostream>#include <vector>#include <stack>#include <queue>#include <cstring>usingnamespacestd;#define MAX_LENGTH 128#define COUNT_OF_PARENTHESE 4classGod_sohyun{charpriority[COUNT_OF_PARENTHESE];stack<int>s_storage;queue<char>input;vector<char>v_result;public:God_sohyun(char_input[MAX_LENGTH],char_priority[COUNT_OF_PARENTHESE]){stringstr(_input);for(inti=0;i<str.size();i++)input.push(str[i]);for(inti=0;i<COUNT_OF_PARENTHESE;i++)priority[i]=_priority[i];}charget_pair(charc){switch(c){case')':return'(';case'}':return'{';case']':return'[';case'>':return'<';}return-1;}//왼쪽 괄호만 넘겨야함//리턴은 오른쪽 괄호로 넘겨서 get_pair를 쓸 수 있도록 취함charget_higher_priority(charleft,charright){charch;for(inti=0;i<COUNT_OF_PARENTHESE;i++){if(priority[i]==left||priority[i]==right){ch=priority[i];break;}}switch(ch){case'(':return')';case'{':return'}';case'[':return']';case'<':return'>';}}voidrun(){charch;while(input.size()>0&&(ch=input.front())){v_result.push_back(ch);input.pop();switch(ch){case'(':case'{':case'[':case'<':s_storage.push(v_result.size()-1);break;case')':case'}':case']':case'>':if(s_storage.size()==0||v_result[(s_storage.top())]!=get_pair(ch)){charhigher=get_higher_priority(v_result[(s_storage.top())],get_pair(ch));if(ch==higher){v_result[(s_storage.top())]=get_pair(higher);s_storage.pop();}else{v_result.at(v_result.size()-1)=higher;}}else{s_storage.pop();}break;}}for(inti=0;i<v_result.size();i++){cout<<v_result[i];}cout<<endl;}};intmain(){vector<God_sohyun>v;inttestcases;cin>>testcases;for(inti=0;i<testcases;i++){charinput[MAX_LENGTH],_priority[COUNT_OF_PARENTHESE+1];cin>>input>>_priority;v.push_back(*(newGod_sohyun(input,_priority)));}for(inti=0;i<v.size();i++){v[i].run();}return0;}
pushbell7
제가 무언가 놓치고 있는 것 같은데 무엇을 놓치고 있는지 모르겠습니다.
두 괄호가 다르다면 mismatched 경우이므로 둘의 우선순위를 비교해 더 높은 우선순위를 갖는 괄호로 맞추어줍니다.
get_pair 함수는 닫는 괄호를 입력으로 받아 해당 여는 괄호를 리턴합니다.
get_higher_priority 함수는 여는 괄호를 입력으로 받아 우선순위를 비교하고 해당하는 닫는 괄호를 리턴합니다.
소스코드입니다.
9년 전