BOJ/String
[BOJ] 17413 단어 뒤집기 2
J_Jayce
2021. 4. 23. 20:56
문제
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) 효율적인 코드