BOJ 3568 : iSharp - https://www.acmicpc.net/problem/3568
우선 공통 변수형과 개별 변수형을 분리한다. 먼저 ,
와 ;
를 지워준 뒤, 공백으로 구분되어 있기 때문에 split()
함수를 이용하여 String 배열을 만든다. String[] str
이라고 하면, str[0]
은 공통 변수형, 나머지는 개별 변수형이다.
뒤집을 때는, 변수명은 그대로 두고 변수형만 뒤집어야 한다. 개별 변수형의 맨 뒤 문자부터 확인한다.
&
나 *
일 경우 그대로 result 문자열에 더해준다. ]
일 경우 그냥 뒤집으면 ][가 되기 때문에 result 문자열에 []
을 더해주고, 인덱스를 하나 더 뺀다. 알파벳
일 경우 변수명이기 때문에 그대로 result에 더해준다.뒤집으면서 변수형과 변수명을 구분하기 위해 #
문자를 추가했다. result 문자열은 변수형#변수명
형태로 return된다.
최종적으로, 공통 변수형+변수형+변수명에 공백과 세미콜론을 잘 조합해서 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String origin = br.readLine().replace(",","").replace(";","");
String[] str = origin.split(" ");
for (int i = 1; i < str.length; i++) {
String[] variable = reverseType(str[i]).split("#");
System.out.println(str[0]+variable[0]+" "+variable[1]+";");
}
}
public static String reverseType(String str){
char[] origin = str.toCharArray();
String result = "";
for (int i = str.length()-1; i >= 0; i--) {
if(origin[i]!=']'){
if(origin[i]=='*' || origin[i]=='&'){
result += origin[i];
}else{
// 알파벳일 경우 변수명이기 때문에 reverse 하지 않음.
//'#'문자를 이용하여 type과 변수명을 구분
result += "#";
for(int j=0; j <= i; j++){
result += origin[j];
}
break;
}
}else{
result += "[]";
i--;
}
}
return result;
}
}
✔ 알고리즘 분류 - 문자열, 파싱
✔ 난이도 - ⚪ Silver 4
딱히 없음