Jun's Development Journey
[BOJ] 17413 단어 뒤집기 2 본문
문제
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 |