Jun's Development Journey

[BOJ] 17413 단어 뒤집기 2 본문

BOJ/String

[BOJ] 17413 단어 뒤집기 2

J_Jayce 2021. 4. 23. 20:56

문제 

www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

풀이

1) 비효율적 코드(1776ms)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Map.*;

public class Main {
    static ArrayList<String> list;
    static String reverse(String str){
        String reverse = "";
        for(int i=str.length()-1;i>=0;i--)
            reverse+=str.charAt(i);
        return reverse;
    }
    static boolean is_alpha(char ch){
        if(ch>='a' && ch<='z')
            return true;
        return false;
    }
    static boolean is_num(char ch){
        if(ch>='0' && ch<='9')
            return true;
        return false;
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        String str = br.readLine();
        Queue<String> queue = new LinkedList<>();
        int idx=0;
        while(idx<str.length()){
            char ch = str.charAt(idx);
            if(ch == '<'){
                String tmp = "";
                tmp+=ch;
                idx++;
                while(idx<str.length() && str.charAt(idx)!='>'){
                    tmp+= str.charAt(idx++);
                }
                tmp+=str.charAt(idx++);
                queue.add(tmp);
            }
            else if(is_num(ch)||is_alpha(ch)){
                String tmp = "";
                tmp+=ch;
                idx++;
                while(idx<str.length() && (is_num(str.charAt(idx))||is_alpha(str.charAt(idx)))){
                    tmp+= str.charAt(idx++);
                }
                queue.add(reverse(tmp));
            }
            else{
                queue.add(" ");
                idx++;
            }
        }
        while(!queue.isEmpty())
            sb.append(queue.remove());
        System.out.println(sb);
    }
}

2) 효율적인 코드

'BOJ > String' 카테고리의 다른 글

[BOJ] 4659번 비밀번호 발음하기  (0) 2021.05.24
[BOJ]9996번 한국이 그리울 땐 서버에 접속하지  (0) 2021.04.08
[BOJ] 1213번 팰린드롬 만들기  (0) 2021.03.22
[BOJ] 9012 괄호  (0) 2021.02.16
[BOJ] 8958 OX 퀴즈  (0) 2021.02.16