문제 풀이/백준

[백준]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에서 처리해주는 것이다. 안 그러면 ][이렇게 들어가게 된다.

마지막으로 ; 를 더해준 뒤에 출력한다.