알고리즘 문제풀이/백준
[백준/BOJ] 3568번 iSharp (C++)
노력의천재
2021. 10. 10. 17:20
https://www.acmicpc.net/problem/3568
구현 자체는 어렵지 않은데 고려해야 할 사항이 많아서 까다롭다. 첫 번째로 변수 오른쪽 옆에 붙은 &, *, []을 왼쪽으로 역순으로 옮길 때, []은 모양이 유지 되어야 한다. 두 번째는 변수명이 두 글자 이상일 수 있다. 예를들어 aa, AbCdE 등이 될 수 있다.
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int main(void) {
// ios_base::sync_with_stdio(false);
// cin.tie(0);
string str;
getline(cin, str);
int pos = 0;
for(int i = 0; i < str.size(); i++) {
if(str[i] == ' ') {
pos = i;
break;
}
}
string sub1, sub2;
sub1 = str.substr(0, pos);
sub2 = str.substr(pos + 1, str.size() - pos);
stringstream ss(sub2);
string token;
while(getline(ss, token, ',')) {
if(token.front() == ' ') token.erase(token.begin());
if(token.back() == ';') token.pop_back();
int alpha_pos = 0;
string alpha = "", var = "";
for(int i = 0; i < token.size(); i++) {
if(!isalpha(token[i])) {
alpha_pos = i;
break;
}
}
alpha = token.substr(0, alpha_pos);
if(alpha != "") {
for(int i = token.size() - 1; i >= alpha_pos; i--) {
if(token[i] == '[') var += "]";
else if(token[i] == ']') var += "[";
else var += token[i];
}
cout << sub1 + var << " " << alpha << ";\n";
} else {
cout << sub1 << " " << token << ";\n";
}
}
}