[백준] 단어 뒤집기 2

urzi·2022년 7월 26일
0

PS

목록 보기
28/36

문제

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

알고리즘

문자열

풀이

스택을 사용해서 푸는 방법을 봤는데 나는 문자열로만 풀었다.

  1. '<' 문자가 나오면 그 앞에 담아둔 문자는 무조건 거꾸로 출력하고 word를 초기화 시킨 뒤 '<' 문자를 담는다.
  2. '>' 문자가 나오면 '>' 문자를 담고 여태까지 담은 문자를 그대로 answer에 담아주고 check 변수를 false로 바꿔준다.
  3. check가 true이면 '<' '>' 사이라는 말이므로 문자를 그대로 담는다.
  4. 위에 3가지가 아니면 '<' '>' 사이의 문자가 아니라는 말이기 때문에 공백이 나올때까지 문자를 담아준다.
  5. 마지막으로 위에 4가지가 모두 아니면서 공백이면 여태까지 담았던 문자를 거꾸로 answer에 넣어주고 마지막으로 공백까지 넣어준다. 그리고 word 변수는 초기화 시켜준다.
  6. for문을 다 돌고 나면 word에 문자가 남아있는데 마지막으로 이거까지 answer에 담아준다. 여기에 문자가 남아있다는 말은 '<' '>' 사이의 문자가 아니라는 말이기 때문에 거꾸로 출력해준다.

코드

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

class Main {

    public String solution(String s) {

        StringBuilder answer = new StringBuilder();
        StringBuilder word = new StringBuilder();
        boolean check = false;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '<') {
                answer.append(word.reverse());
                word = new StringBuilder();
                check = true;
                word.append(s.charAt(i));
            } else if (s.charAt(i) == '>') {
                check = false;
                word.append(s.charAt(i));
                answer.append(word);
                word = new StringBuilder();
            } else if (check) {
                word.append(s.charAt(i));
            } else {
                if (s.charAt(i) == ' ') {
                    answer.append(word.reverse());
                    answer.append(" ");
                    word = new StringBuilder();
                } else {
                    word.append(s.charAt(i));
                }
            }
        }

        // 마지막 남은거 처리
        answer.append(word.reverse());

        return answer.toString();
    }

    public static void main(String[] args) throws IOException {

        Main solution = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();

        System.out.println(solution.solution(s));

    }
}

profile
Back-end Developer

0개의 댓글