기초 알고리즘 - 단어 뒤집기 2

Code_Alpacat·2021년 11월 25일
0

기초 알고리즘!

목록 보기
9/19

문자열을 입력받아 뒤집는 문제다. 뒤집을 때, 처음과 끝이 <>인 문자열들은 뒤집지 않고 그대로 출력되는 것이 조건이다.

나는 이 문제에 스택을 사용해서 풀어보겠다. 결국, 단어를 쌓고 반대로 출력할 때는 스택에서 pop을 해줘야하므로, 공백과 <>같은 예외를 처리해주는 방향으로 문제를 풀 것이다.

예외를 모두 적어두고, 그에 맞게 구조를 짜야했다.

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


public class Hello_world {
 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Stack<Character> stack = new Stack<>();
		
		String str = br.readLine();
		
		StringBuilder sb = new StringBuilder();
		
		boolean inside = false;
		
		for(int i =0; i<str.length(); i++) {
			
			//<이 시작될 때,
			if(str.charAt(i) == '<') {
				inside = true;
				
				while(!stack.isEmpty()) {
					sb.append(stack.pop());
				}
				
				sb.append(str.charAt(i));
			}
			//>을 만났을 때
			else if(str.charAt(i) == '>') {
				inside = false;
				
				sb.append(str.charAt(i));
				
			}
			//<> 안에 있을 때,
			else if(inside) {
				sb.append(str.charAt(i));
			}
			
			
			//<>밖에 있을 때,
			else if(!inside) {
				//공백일 때,
				if(str.charAt(i) == ' ') {
					while(!stack.isEmpty()) {
						sb.append(stack.pop());
					}
					
					sb.append(str.charAt(i));
				} else {   //공백이 아닐때,
					stack.push(str.charAt(i));
				}
			}
			
		}
		//stack에 쌓인 나머지 pop
		while(!stack.isEmpty()) {
			sb.append(stack.pop());
		}
		
		System.out.print(sb);
		}
}
profile
In the future, I'm never gonna regret, cuz I've been trying my best for every single moment.

0개의 댓글

관련 채용 정보