프로그래밍/알고리즘

BOJ 3568 · iSharp

반응형


알고리즘 분류 : 문자열 처리  


입력받은 한 줄의 변수 선언을 여러 줄의 변수 선언으로 바꾸는 문제다. 변수는 띄어쓰기로 구분되고, 여러 개의 변수가 주어질 수 있다. 또한 변수 이름이 여러 글자일 수 있기 때문에, 문자열을 뒤집을 때 유의해야 한다.


  • C++은 String Stream을 이용하여 띄어쓰기로 분리된 문자열을 각각 처리하면 편하다.
  • Python은 split으로 각각 처리하면 된다.
  • 문자열을 뒤쪽부터 탐색하면서, 특수 문자가 나타나면 자료형 앞으로 붙인다.
  • 알파벳이 나온다면, 변수명이다. 뒤쪽부터 탐색했으므로, 거꾸로 뒤집어서 출력한다.




C++ 소스코드


#include <iostream>
#include <sstream>
#include <string>
using namespace std;

void solve(string s) {
    for (int i=(int)s.size()-2; i>=0; i--) {
        if (s[i] == ']') cout << "[]", i--;
        else if (s[i] == '&' || s[i] == '*') cout << s[i];
        else {
            cout << ' ';
            for (int j=0; j<=i; j++) cout << s[j];
            cout << ";\n";
            return;
        }
    }
}

int main() {
    string input;
    getline(cin, input);
    stringstream ss(input);
    string datatype, variable;
    ss >> datatype;
    while (ss >> variable) { 
        cout << datatype;
        solve(variable);
    }
    return 0;
}




Python 3 소스코드


from sys import stdin, stdout
input = stdin.readline
print = stdout.write

def solve(s):
    for i in range(len(s)-2, -1, -1):
        if s[i] == ']':
            print('[]')
        elif s[i] == '[':
            continue
        elif s[i] in '&*':
            print(s[i])
        else:
            print(' ')
            for j in range(0, i+1):
                print(s[j])
            print(';\n')
            return

datatype, *variable = input().split()
for s in variable:
    print(datatype)
    solve(s)




참고



반응형