코딩테스트/백준

[백준]17413번 단어 뒤집기 2 - Java

GAEBAL 2022. 3. 20. 21:37
728x90

문제

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

풀이

어려운 문제는 아닌 듯하다

코드의 아랫부분에 전체 주석처리 되어 있는 코드가 있는데 문제 똑바로 안읽고 그렇게 풀었다가 시간만 날렸다 ㅠㅠㅠ

매번 문제 똑바로 읽어야지 하면서 매번 안그러는 것 같다,,,,

 

암튼 내 생각에 이 문제의 포인트는 flag를 하나 둬서 그걸로 현재 탐색하는 위치가 태그 안쪽인지 바깥쪽인지를 정해주는 부분이라고 생각한다!

그 부분만 이해했다면 쉽게 풀릴 듯??? 

 

코드

// 17413번 단어 뒤집기 2
// https://www.acmicpc.net/problem/17413

package BAEKJOON;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Num17413_단어뒤집기2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        Stack<Character> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();

        boolean flag = false; // 태그 안에 있으면 true 밖에 있으면 false

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == '<') {
                flag = true;

                while (!stack.isEmpty()) {
                    sb.append(stack.pop());
                }

                sb.append(c);
            } else if (c == '>') {
                flag = false;
                sb.append(c);
            } else if (flag) {
                sb.append(c);
            } else if (!flag) {
                if (c == ' ') {
                    while (!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                    sb.append(c);
                } else {
                    stack.push(c);
                }
            }
        }

        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }

        System.out.println(sb);






//        String[] strArr = str.split(" ");
//
//        String[] answerArr = new String[strArr.length];
//
//        for (int i = 0; i < strArr.length; i++) {
//            String tempStr = strArr[i];
//            boolean isChangePossible = true;
//            Stack<Character> stack = new Stack<>();
//
//            for (int j = 0; j < tempStr.length(); j++) {
//                if (tempStr.charAt(j) == '<') {
//                    isChangePossible = false;
//                    break;
//                } else {
//                    stack.push(tempStr.charAt(j));
//                }
//            }
//
//            String newTempStr = "";
//
//            if (isChangePossible) {
//                for (int j = 0; j < tempStr.length(); j++) {
//                    newTempStr += stack.pop();
//                }
//                answerArr[i] = newTempStr;
//            } else {
//                answerArr[i] = tempStr;
//            }
//        }
//
//
//        System.out.println(Arrays.toString(answerArr));
    }
}
 
728x90