hye-log

[백준]17413번 단어 뒤집기2(JAVA) 본문

CodingTest/Baekjoon

[백준]17413번 단어 뒤집기2(JAVA)

iihye_ 2023. 7. 29. 18:05

0. 문제 링크

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

1. 문제 설명

1) 알파벳 소문자, 숫자, 공백, 특수문자로 이루어진 문자열

2) <로 시작해서 >로 끝나는 태그는 뒤집지 않음

3) 나머지 문자열은 뒤집어서 출력

 

2. 입출력

// input1
baekjoon online judge

// output1
noojkeab enilno egduj

// input2
<open>tag<close>

// output2
<open>gat<close>

 

3. 코드

import java.io.*;
import java.util.*;

public class b17413 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String str = sc.nextLine(); // 읽어오기
		Stack<Character> stack = new Stack<>(); // 스택 선언
		boolean flag = false; // <> 확인
		StringBuilder ans = new StringBuilder(); // 정답 만들 StringBuilder 선언
		
		for(int i = 0; i < str.length(); i++) {
			char c = str.charAt(i); // 현재 리턴된 문자
			
			if(c == '<') { // < 를 만나면
				while(!stack.isEmpty()) { // stack이 비어있을 때까지
					ans.append(stack.pop()); // stack에 있는거 꺼내서 정답으로
				}
				flag = true; // > 찾아야 함
			} else if(c == '>') { // > 를 만나면
				flag = false; // > 찾음
				ans.append(c); // > 정답으로
				continue;
			}
			
			if(flag == true) { // < 를 만나 순서대로 입력하기
				ans.append(c); 
			} else { 
				if(c == ' ') { // 공백을 만나면
					while(!stack.isEmpty()) { // stack이 비어있을 때까지
						ans.append(stack.pop()); // stack에 있는거 꺼내서 정답으로
					}
					ans.append(c); // 공백 정답으로
					continue;
				} else { // 공백이 아니면
					stack.push(c); // stack에 추가하기
				}
			}
		}
		
		while(!stack.isEmpty()) { // stack에 남아있는 게 있으면
			ans.append(stack.pop()); // stack에 있는거 꺼내서 정답으로
		}
		
		System.out.println(ans);
		
	}

}

 

실행 결과

 

4. 회고

1) stack을 이용하여 <로 시작하고 >로 끝나는 문자열 구분

2) StringBuilder를 이용하여 정답 문자열 생성

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Baekjoon/b17413.java

 

728x90
Comments