백준 17413 단어뒤집기 2/ 문제풀이 java

남순식·2022년 11월 30일
2

정답자율을 보면 50퍼센트가 넘어가는 문제다.
쉽다고 생각할 수 있지만 나는 꽤나 여러번 반복문을 돌려가고 조건문을 통해 풀 수 있었다.

문제는 간단하다.

문자열S가 주어질때
문자열에 단어들은 공백으로 단어를 구분하고
<,>로 쌓인 문자는 단어가 아니라 태그이다.
ex) </ab cd>ef gh</ij kl>
이문자열중 <>로 쌓여져 있는것은 태그이며 ef gh는 ef, gh라는 단어이다.

공백으로 단어를 구분하여 한단어씩 뒤집어 출력할 것이고
<>로 쌓인 태그들은 그대로 출력할 것이다.

생각해보기

단어들을 뒤집어 출력한다.
이것은 Last In First Out 즉 스택을 활용하면 될 것이다.
그럼 언제 pop()을 실행하면 될것인가?
단어들을 구분짓는 ' '공백이나, 태그를 시작하는 <를 만나면 pop을 해주면 된다.
언제까지?
스택이 비어있지 않으면

import java.util.Stack;

public class mystack {
    int i = 0;       //baekjoon oline    ' ' <- '<'          <ab cd>ef gh<ij kl>   ->  <ab cd>fe hg<ij kl>mh
    public String revers(String str) {

        Stack<Character> stack = new Stack<>();
        String temp = "";//

        while (this.i < str.length()){
            if (str.charAt(i) == '<'){
                while (!stack.isEmpty()){
                    temp += stack.pop();
                }
                while (str.charAt(i) != '>'){
                    temp += str.charAt(i);
                    i++;
                }
            } else if (str.charAt(i) == '>'){
                temp += str.charAt(i);
                i++;
            } else if (str.charAt(i) == ' '){
                while (!stack.isEmpty()){
                    temp += stack.pop();
                }
                temp += ' ';
                i++;
            } else {
                stack.push(str.charAt(i));
                i++;
            }
        }
        while (!stack.isEmpty()){
            temp += stack.pop();
        }
        return temp;
    }

클래스를 만들고 멤버변수로 i를 지정해주어
주어진 문자열을 하나씩 확인하기로 했다.

' '나 '<'를 만났을때 스택이 비어있지않으면 스택에 쌓인 데이터들을 정답이 될 temp문자열에 붙여주고
스택에 있던 데이터들을 붙여놓고 나면 그다음 잊지 말고 ' '나 '<' 를 문자열에 붙여주어야한다.

조건에 걸릴때마다 i++해주어 문자열을 전체 다 확인할 수있었고
첫번째 반복문이 끝났을때 ' '나 '<'를 만나지않았을 수도 있기때문에
다시한번 스택이 비어있지않다면 스택.pop을 해주어 문자열에 붙여주면 정답이 될
리턴을 구할 수 있다.

profile
java 주니어

3개의 댓글

comment-user-thumbnail
2022년 11월 30일

Wow!!
훠오!!
완전 뒤집어 놓으셨다!!

2개의 답글