백준 17413 - 단어 뒤집기 2
Updated:
Java
17413 번 - 단어 뒤집기 2
문제
접근 방법
Stack
을 이용하여 단어를 뒤집어 보았다.
문자열을 앞에서 부터 탐색하여 ‘<’나 ‘ ‘를 만나지 않으면 계속하여 문자를 Stack
에 저장하고 개수를 센다.
만약 ‘<’와 ‘ ‘를 만나면, 단어 처음부터 Stack
을 pop하여 하나씩 갱신해 단어를 뒤집어 본다.
’<’를 만나면 ‘>’를 만날때 까지 문자를 Stack
에 넣지 못하게 하여 태그는 보존한다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] str = br.readLine().toCharArray();
int idx = 0;
char curC;
boolean tagOn = false;
Stack<Character> stack = new Stack<>();
// 앞에서 부터 탐색
for(int i = 0; i < str.length; i++) {
curC = str[i];
if(curC == ' ' || curC == '<') {
// 단어를 뒤집는다.
while(!stack.isEmpty()) {
str[i - idx] = stack.pop();
idx--;
}
if(curC == '<') {
tagOn = true;
}
}
else if(curC == '>') {
tagOn = false;
}
else if(!tagOn) { // 태그 내부가 아니면 stack에 쌓는다
idx++;
stack.add(curC);
}
// 만약 단어가 이어지다 마지막에 다다르면, 뒤집고 종료한다.
if(i == str.length - 1) {
while(!stack.isEmpty()) {
str[i - idx + 1] = stack.pop();
idx--;
}
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length; i++) {
sb.append(str[i]);
}
System.out.println(sb.toString());
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
총평
후기
Stack과 문자열을 사용한 구현 문제.