반응형
https://www.acmicpc.net/problem/3568
단순 구현 문제라 그냥 풀면 됐던 문제.
우선 입력값을 분리하는 split 함수를 먼저 보자. 아래의 아이디어를 그대로 구현하면 된다.
예제의 입력값 int& a*[]&, b, c*; 을 분리하려면, 공백을 기준으로 분리한 다음 각 문자열을 벡터에 넣어주면 된다.
나는 string의 'find' 함수를 써서 구현했다. 어렵지 않으니 아래 정답 코드를 보면 쉽게 이해할 수 있을 것이다.
그 다음으로 변수명은 대문자 또는 소문자 알파벳만 가능하므로 어떤 문자가 대소문자 알파벳인지 판별해주는 boolean 함수를 만들어 줬다.
이제 예제의 입력값으로 한번 풀어보자.
입력값 = int& a*[]&, b, c*;
split 결과 벡터
vars = { int&, a*[]&, b, c* }
vars[0] 은 무조건 변수 타입이 된다. 이를 type이라는 변수에 저장해준다.
1번째 인덱스부터 아래의 과정을 거치면 된다.
빈 문자열 type_ 과 _var
문자열의 끝부터 역순으로 다음을 검사
1) 대소문자 알파벳이 아니면 type_ 에 더해준다. 단, '[]' 는 역순으로 더해줘야한다. 안그러면 '][' 형태로 출력함.
2) 대소문자 알파벳이면 _var 에 역순으로 더해준다
type , type_ , " " , _var , ";" 순서로 출력해주면 된다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> split(string input, char token){
vector<string> vars;
int pre = 0;
int cur = input.find(token);
while (cur != string::npos) {
vars.push_back(input.substr(pre, cur - pre));
pre = cur + 1;
cur = input.find(token, pre);
}
vars.push_back(input.substr(pre, cur - pre));
// find는 인자가 없으면 마지막 인자 반환
return vars;
}
bool is_alpha(char c){
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return true;
return false;
}
int main() {
vector<string> vars;
string input;
getline(cin, input);
vars = split(input, ' ');
string type, type_, _var, var;
for (int i = 0; i < vars.size(); i++) {
if (i == 0) {
type = vars[i];
continue; // 첫번째는 타입에 저장
}
else {
// 가장 끝은 ; 또는 , 니깐 제거
var = vars[i].substr(0, vars[i].size() - 1);
type_ = "";
_var = "";
for (int i = var.size() - 1; i >= 0; i--) {
if(is_alpha(var[i])){
// 알파벳이면 변수명이므로 빼준다
_var = var[i] + _var; // 역순으로 더해줘야함
continue;
}
if (var[i] == ']') type_ += '[';
else if (var[i] == '[') type_ += ']';
else type_ += var[i];
}
cout << type << type_ << " " << _var << ";" << endl;
}
}
return 0;
}
반응형
'알고리즘 문제풀이 > 추천 문제' 카테고리의 다른 글
[ 백준 2290 ] LCD Test (C++) (0) | 2022.02.28 |
---|---|
[ 백준 16506 ] CPU (C++) (0) | 2022.02.23 |
[ 백준 5557 ] 1학년 (C++) (0) | 2022.02.14 |
[ 백준 12865 ] 평범한 배낭 (C++) (0) | 2022.02.13 |
[ 백준 12026 ] BOJ 거리 (C++) (0) | 2022.02.10 |