문제 풀이/백준
[백준]3568번. iSharp(JAVA)
27200
2024. 4. 29. 16:29
https://www.acmicpc.net/problem/3568
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String common = st.nextToken();
StringBuilder sb;
while(st.hasMoreTokens()){
sb = new StringBuilder();
sb.append(common);
String s = st.nextToken();
for(int j = s.length() - 2; j >= 0; j--){
if(s.charAt(j) >= 'a' && s.charAt(j) <= 'z' || s.charAt(j) >= 'A' && s.charAt(j) <= 'Z'){
sb.append(" ");
sb.append(s.substring(0,j+1));
break;
}else if(s.charAt(j) == ']'){
sb.append("[]");
j--;
}else{
sb.append(s.charAt(j));
}
}
sb.append(";");
System.out.println(sb);
}
}
}
문제 자체는 그렇게 어렵지 않으나 다양한 도구들이 쓰인 것만 정리해보자.
StringTokenizer st이다. 일반적으로 문장을 받을 때 자주 쓰는데 지금처럼 문장의 길이 혹은 배열의 길이가 정해져있지 않을 때 꽤 유용한 도구로 .hasMoreTokens()를 사용할 수 있다. 같은 의미로 countTokens()를 쓸 수도 있다.
이 후에는 stringBuilder를 이용해 문장을 만들었다.
1. 기본값을 더해준다.
2. 만약 알파벳이라면 0부터 j+1까지를 잘라서 더해준다.
3.]를 만난다면 j를 하나 더 줄여주고 []를 한번에 더해준다.
4. 그냥 변수형이라면 더해준다. -> 이것 때문에 3에서 처리해주는 것이다. 안 그러면 ][이렇게 들어가게 된다.
마지막으로 ; 를 더해준 뒤에 출력한다.