Algorithm/BOJ
[백준] 17413번 단어 뒤집기2 자바
YOONAYEON
2021. 11. 27. 15:56
문제 (실버3)
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
문제 풀이
입력받은 문자열을 toCharArray 함수를 이용하여 char[]배열로 바꾼 후 string변수에 답을 붙여나가면서 진행했다.
문자열 반복을 해주면서 태그표시가 나오면 문자 그대로를 붙이고, 아니면 스택에 넣어주었다.
띄어쓰기가 나오거나 / 다시 태그가 나오거나 / 문자열이 끝나거나 이 세가지 경우에 한해서 스택에 넣은 값들을 비워내면서 string변수에 붙였다.
※ 이유는 모르겠는데 백준에서 코드제출할 때 언어설정을 Java8로 하면 시간초과가 뜨고, Java15로 제출해야 정답이 뜬다.
소스 코드
import java.util.Scanner;
import java.util.Stack;
public class b_17413 {
public static void main(String[] args) {
//입력받기
Scanner sc = new Scanner(System.in);
String answer = "";
String str = sc.nextLine();
//solution
char[] arr = str.toCharArray();
Stack<Character> stack = new Stack<>();
boolean tag = false;
for(int i = 0; i < arr.length; i++) {
if(tag) {
if(arr[i] == '>')
tag = false;
answer += arr[i];
}
else if(arr[i] == '<') {
while(!stack.empty())
answer += stack.pop();
answer += arr[i];
tag = true;
}
else if(arr[i] == ' ') {
while(!stack.empty())
answer += stack.pop();
answer += arr[i];
}
else {
stack.push(arr[i]);
}
}
while(!stack.empty())
answer += stack.pop();
System.out.println(answer);
sc.close();
}
}