Hayden's Archive

[알고리즘] 백준 - 17413번 : 단어 뒤집기 2 본문

Algorithm

[알고리즘] 백준 - 17413번 : 단어 뒤집기 2

_hayden 2020. 7. 9. 09:22

알고리즘 문제 출처 : https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

내가 작성한 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		Stack<String> temp = new Stack<>();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		String str = br.readLine();
		String now = "";
		for(int i=0; i<str.length(); i++) {
			now = str.substring(i,i+1);
			if(now.equals("<")) { //태그일 경우
				if(!temp.isEmpty()) {//앞선 스택이 비었는지 확인
					while(!temp.isEmpty()) {
						sb.append(temp.pop());
					}
				}
				while(true) {
					sb.append(now);
					if(now.equals(">")) break;
					i++;
					now = str.substring(i,i+1);
				}
			}
			else { //태그가 아닐 경우
				if(now.equals(" ")) { //공백일 경우
					while(!temp.isEmpty()) {
						sb.append(temp.pop());
					}
					sb.append(" ");
					continue;
				}else if(i==str.length()-1){//마지막 문자일 경우
					temp.push(now);
					while(!temp.isEmpty()) {
						sb.append(temp.pop());
					}
					break;
				}else { //공백이 아닐 경우
					temp.push(now);
				}
			}
		}//for
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}
}