알고리즘/BOJ

백준 3568번 iSharp

꾸준함. 2019. 5. 2. 14:01

문제 링크입니다: https://www.acmicpc.net/problem/3568

 

3568번: iSharp

문제 선영이는 C, C++, Java와는 다른 아주 세련된 언어를 만들었다. 선영이는 이 아름답고 예술적인 언어의 이름을 i#으로 정했다. i#은 기본 변수형과 배열([]), 참조(&), 포인터(*)를 제공한다. 배열, 참조, 포인터는 순서에 상관없이 혼합해서 사용할 수 있다. 즉, int의 참조의 참조의 배열의 포인터도 올바른 타입이다. int&&[]* i#은 여러 개의 변수를 한 줄에 정의할 수 있다. 공통된 변수형을 제일 먼저 쓰고, 그 다음에 각

www.acmicpc.net

간단한 문자열 처리 문제였습니다.

알고리즘은 아래와 같습니다.

1. 전처리를 통해 공통된 변수형과 각각의 추가적인 변수형 + 변수명을 분리합니다.

2. 각각의 변수에 대해 추가적인 변수형이 있는지 파악합니다.

2.1 추가적인 변수형이 있다면 공통된 변수형에 역순으로 추가적인 변수형을 이어붙입니다.(대괄호의 순서는 유지되어야합니다.)

2.2 추가적인 변수형이 없다면 이어붙이지 않습니다.

3. 한 칸 띄고 변수명을 출력하고 마지막에 ;을 붙여줍니다.

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string s;
getline(cin, s);
string init;
vector<string> v;
string temp;
for (int i = 0; i < s.length(); i++)
{
//공통된 변수형
if (s[i] == ' ')
{
init = temp;
temp.clear();
continue;
}
//하나의 추가적인 변수형 + 변수의 이름의 끝
else if (s[i] == ',')
{
v.push_back(temp);
i++;
temp.clear();
}
//끝
else if (s[i] == ';')
{
v.push_back(temp);
temp.clear();
}
else
temp += s[i];
}
for (int i = 0; i < v.size(); i++)
{
int idx = -1;
//추가적인 변수형 유무 파악
for (int j = 0; j < v[i].size(); j++)
if (!((v[i][j] >= 'a' && v[i][j] <= 'z') || (v[i][j] >= 'A' && v[i][j] <= 'Z')))
{
idx = j;
break;
}
cout << init;
//추가적인 변수형이 없는 경우
if (idx == -1)
cout << " " << v[i];
//추가적인 변수형이 있는 경우
else
{
//추가적인 변수형 역순으로 출력
for (int j = v[i].size() - 1; j >= idx; j--)
{
//역순으로 출력하지만 대괄호 순서는 맞아야한다
if (v[i][j] == ']')
{
cout << "[]";
j--;
continue;
}
cout << v[i][j];
}
cout << " ";
for (int j = 0; j < idx; j++)
cout << v[i][j];
}
cout << ";\n";
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

 

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 15360번 Rasvjeta  (2) 2019.05.03
백준 4574번 스도미노쿠  (0) 2019.05.03
백준 2290번 LCD Test  (0) 2019.05.02
백준 3190번 뱀  (5) 2019.05.01
백준 14499번 주사위 굴리기  (0) 2019.04.30