알고리즘/BOJ

[BOJ] 17413. 단어 뒤집기 2

재담 2022. 4. 20. 23:30

문제 원본 : https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String s = br.readLine();

        StringBuilder builder = new StringBuilder();
        StringBuilder temp = new StringBuilder();

        int len = s.length();
        boolean isTag = false;
        for (int i = 0; i < len; ++i) {
            char ch = s.charAt(i);
            if (ch == '<') {
                if (temp.length() > 0) {
                    builder.append(temp.reverse());
                    temp = new StringBuilder();
                }

                builder.append(ch);
                isTag = true;
            } else if (ch == '>') {
                builder.append(ch);
                isTag = false;
            } else if (isTag) {
                builder.append(ch);
            } else {
                if (ch == ' ') {
                    builder.append(temp.reverse()).append(' ');
                    temp = new StringBuilder();
                } else {
                    temp.append(ch);
                }
            }
        }

        if (temp.length() > 0) {
            builder.append(temp.reverse());
        }

        bw.write(builder.toString());

        bw.close();
        br.close();
    }
}
  • 문자열 문제
  • 한 글자씩 반복문을 돌면서 태그이면 그대로 붙이고 아니라면 공백을 기준으로 뒤집어 붙여주면 해결된다.