본문 바로가기
Algorithm/BOJ

[백준] 17413번 단어 뒤집기2 자바

by YOONAYEON 2021. 11. 27.
문제 (실버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();
	}

}

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 1987번 알파벳 자바  (0) 2022.01.03
[백준] 11399번 ATM 자바  (0) 2022.01.03
[백준] 1753번 최단경로 자바  (0) 2021.12.07
[백준] 9251번 LCS 자바  (0) 2021.11.29
[백준] 1260번 DFS와 BFS 자바  (0) 2021.11.17