문제 링크입니다: 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. 한 칸 띄고 변수명을 출력하고 마지막에 ;을 붙여줍니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > 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 |