[백준] 17413번 단어 뒤집기 2

고승우·2023년 1월 27일
0

알고리즘

목록 보기
9/86
post-thumbnail

문제는 다음과 같다

백준 17413 단어 뒤집기 2

알고리즘 자체는 단순했다. 문자열을 나누어 뒤집을지 안 뒤집을지 결정하면 되는 문제였지만 StringTokenizer의 사용법과 문자열(String)에서의 인덱스 활용하는 법에 익숙하지 않았다.

문자열을 구분하는 여러가지 방법

  1. String.split()을 활용한 경우, Delimiter(구분 문자)를 or를 나타내느 문자인 "|"를 활용하여 여러개의 구분 문자를 활용할 수 있다. delim 매개변수의 값으로 "a|b|c"를 넘겨줄 경우 a, b, c를 기준으로 문자열이 나뉜다.
  2. StringTokenizer를 활용하는 경우이다. StringTokenizer에서 delim 의 인자로 받은 스트링을 하나의 char 쪼갠 후에 나눈다. 즉, delim의 이자로 "abc"를 넘겨준 경우 a, b, c로 문자열이 나뉜다. 이러한 delimiter(구분 문자)또한 포함하고 싶은 경우에는 returnDelim 매개변수의 인자를 true로 넘겨주면 된다.

이 문제는 StringTokenizer를 활용하였고, 문자를 구분한 후에도 순서를 뒤집을 것인지 아닌지 결정해야 하기 때문에 returnDelim의 매개변수를 true로 넘겨 주었다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        int n, k, idx = 0;
        String tmp;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st = new StringTokenizer(br.readLine(), " <>", true);
            while (st.hasMoreTokens()){
                tmp = st.nextToken();
                if (tmp.equals("<")){
                    bw.write(tmp);
                    while(!(tmp = st.nextToken()).equals(">")){
                        bw.write(tmp);
                    }
                    bw.write(tmp);
                }
                else {
                    n = tmp.length() - 1;
                    for(int i = n; i >= 0; i--){
                        bw.write(tmp.charAt(i));
                    }
                }
            }
            bw.flush();
            bw.close();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
profile
٩( ᐛ )و 

0개의 댓글