백준 17413 / 단어 뒤집기

dogit·2021년 7월 20일
0

백준문제

목록 보기
13/67

문제

풀이

설명

문자열을 거꾸로 출력하는 것은 스택을 사용하면 된다.
그리고 태그 안과 밖을 구분하는 것은 안에 있으면 true 밖이면 false로 구별하면 된다.

  1. 우선 '<'이 오면 스택에 저장되어 있는 것들을 먼저 다 출력한다. (empty 될때 까지)
  2. '>'이 오면 그대로 출력
  3. 태그 안에 있으면 문자열을 그대로 출력
  4. 태그 밖에 있으면서 공백이 오면 스택에 있는 것들을 빌 때까지 pop하여 출력하고 공백이 아니면 스택에 push한다.

코드

import java.util.Scanner;
import java.util.Stack;

public class Num17413 {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String S = sc.nextLine();
		Stack<Character> stk = new Stack<>();
		
		//<> 안에 있는지, 밖에 있는지 구분
		//<> 안이면 true, 밖이면 false
		boolean inout = false;
		
		// S를 하나씩 탐색
		for (int i = 0; i<S.length(); i++) {
			//'<'이 오면
			if(S.charAt(i) == '<') {
				inout = true;
				while (!stk.isEmpty()) {
					System.out.print(stk.pop());
				}
				//앞에 '<' 기호 표시
				System.out.print(S.charAt(i));
			}
			
			//'>'이 오면
			else if(inout) {
				System.out.print(S.charAt(i));
			}
			
			//<> 안에 있으면
			else if(!inout) {
				// 공백이라면
				if(S.charAt(i)==' ') {
					//스택에 저장되어 있는 것을 다 pop하면서 출력
					while (!stk.isEmpty()) {
						System.out.print(stk.pop());
					}
					//공백 출력
					System.out.print(S.charAt(i));
				}
				//공백이 아니면
				else {
					//스택에 넣기
					stk.push(S.charAt(i));
				}
			}
		}
		
		// 나머지 스택에 저장되어 있는 것을 다 pop하면서 출력
		while (!stk.isEmpty()) {
			System.out.print(stk.pop());
		}
	}
}

참고 : https://yongku.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-17413%EB%B2%88-%EB%8B%A8%EC%96%B4-%EB%92%A4%EC%A7%91%EA%B8%B0-2-%EC%9E%90%EB%B0%94Java
출처 : https://www.acmicpc.net/problem/17413

profile
느리더라도 꾸준하게

0개의 댓글