본문 바로가기
알고리즘/백준

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

by binghe819 2020. 4. 25.

[https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다. 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자

www.acmicpc.net


1. 풀이

 

[백준 9093] 단어 뒤집기 - 자바 와 비슷한 문제이다.

 

루프를 돌면서 해당 문자가 태그<>안인지 아닌지만 확인하여 단어를 뒤집어 주면 된다.

 

태그 인지 아닌지 확인할 때는 정수를 사용해서 여는 문자 ('<')일때는 플러스 1을 해주고,

 

닫는 문자 ('>')일때는 마이너스 1을 해줌으로써, 태그 안인지 밖인지 구분이 가능하다.

 


2. 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		Stack<Character> stack = new Stack<Character>();
		int check = 0; // 태그안인지 아닌지 체크.
		String input = sc.nextLine();
		StringBuilder result = new StringBuilder();
		
		for(char ch : input.toCharArray()) {
			if(ch == '<') {
				check+=1; // 태그 안을 의미.
				// 태그 전까지의 문자 뒤집기.
				while(!stack.isEmpty()) {
					result.append(stack.pop());
				}
				result.append("<");
			} else if(ch == '>') {
				check-=1; // 태그 탈출.
				result.append(">");
			} else if(ch == ' ') {
				// 공백 전까지의 문자 뒤집기.
				while(!stack.isEmpty())
					result.append(stack.pop());
				result.append(" ");
			} else {
				if(check == 0) // 태그 밖
					stack.push(ch);
				else // 태그 안.
					result.append(ch);
			}
		}
		
		// 스택에 남은 문자 뒤집기.
		while(!stack.isEmpty())
			result.append(stack.pop());
		
		System.out.println(result);
		sc.close();
		return;
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준 17298] 오큰수 - 자바  (0) 2020.04.26
[백준 10799] 쇠막대기 - 자바  (1) 2020.04.26
[백준 10866] 덱 - 자바  (0) 2020.04.25
[백준 1158] 요세푸스 문제 - 자바  (0) 2020.04.25
[백준 10845] 큐 - 자바  (0) 2020.04.25

댓글