Cooper's devlog

단어 뒤집기 :17413번 - JAVA 본문

Algorithm/Baekjoon

단어 뒤집기 :17413번 - JAVA

cooper_dev 2020. 7. 9. 10:14

1. 문제 링크

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 


2. 문제 설명

 

 


3. 문제 접근법

  • 기존의 단어뒤집기 문제와 접근 방식과 유사하지만 추가적인 조건이 필요하다.
  • 핵심 변수 및 자료구조
    • Queue<Character> queue : 괄호 안에 있는 값들은 queue에 추가한다.
    • Stack<Character> stack : 괄호에 속하지 않는 값들은 stack에 추가한다.
    • has_bracket(boolean) : 괄호안에 포함되어있는지 확인하는 flag 변수

(1) 입력 값이 '<'라면,

  • stack에 들어있는 모든 값들 호출
  • has_bracket = true로 변경 

(2)입력 값이 '>'라면

  • queue에 있는 모든 값들 모두 호출
  • has_bracket = false로 변경

(3)그 외에 값(else)

  • 입력값이 ' '(띄어쓰기)인 경우,
    1. 만약 stack에 들어있는 모든 값들 호출
  • 입력값이 띄어쓰기가 아니라면(else),
    1. stack에 값 추가(stack.push());

 

 


4. 문제 풀이

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
 
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        Stack<Character> stack = new Stack<>();
        Queue<Character> queue = new LinkedList<>();
        
        String input_str = br.readLine();
        input_str = input_str + ' ';
        
        boolean has_bracket = false;
        for (int i = 0; i < input_str.length(); i++) {
            if(input_str.charAt(i) == '<') {
                while(!stack.isEmpty())    System.out.print(stack.pop());
                has_bracket = true;
            }
            
            if(has_bracket) {
                queue.add(input_str.charAt(i));
                if(input_str.charAt(i) == '>') {
                    while(!queue.isEmpty())    System.out.print(queue.poll());
                    has_bracket = false;
                }
            }else {
                if(input_str.charAt(i) == ' ') {
                    while(!stack.isEmpty())    System.out.print(stack.pop());
                    System.out.print(" ");
                }else {
                    stack.add(input_str.charAt(i));
                }
            }
        }
        br.close();
    }
}
 
 

 

<정답확인>


5. 느낀점 및 특이사항

당연한 이야기지만, 기존의 문제에서 추가적인 조건을 충족하고자 하는 경우에는 if문으로 접근해야 한다.

(그거 알지? 너무 당연한데 당연해서 안떠오르는 그거...)

 

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

오큰수 :17298번 - JAVA  (0) 2020.07.10
쇠막대기 :10799번 - JAVA  (0) 2020.07.09
조세퍼스 문제 : 1158번 - JAVA  (0) 2020.07.08
에디터:1406번 - JAVA  (0) 2020.07.08
스택수열 : 1874번 - JAVA  (0) 2020.07.07
Comments