[백준] 9093 - 단어 뒤집기 (Java)

민영·2021년 7월 15일
0

[Algorithm] 백준

목록 보기
21/31
post-thumbnail

문제

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

코드

import java.util.Scanner;
import java.util.Stack;

public class wordReverse {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int count = Integer.parseInt(sc.nextLine()); 

        StringBuilder result = new StringBuilder();

        for (int i = 0; i < count; i++) {
            String sentence = sc.nextLine() + "\n"; 
            Stack stack = new Stack<>();

            for (int j = 0; j < sentence.length(); j++) {
                if (sentence.charAt(j) == ' ' || sentence.charAt(j) == '\n') { 
                    while (!stack.empty()) { 
                        result.append(stack.pop()); 
                    }
                    result.append(sentence.charAt(j)); 
                } 
                else {
                    stack.add(sentence.charAt(j)); 
                }
            }
        }

        System.out.print(result.toString());

    }
}

결과


정리

개념

Input을 하기 위해 사용한 함수를 정리해보자.

  • nextInt() : System.in으로 입력 받은 값 중 Int값만 뽑아내 return(엔터) 전까지 반환한다.
  • nextLine() : System.in으로 입력 받은 값 중 문자열 모두를 return(엔터)을 포함해 반환한다.
    +) next() : System.in으로 입력 받은 값 중 공백(띄어쓰기) 전까지의 연속된 문자열을 반환한다.
    return을 포함해서 반환하는 함수도 있고 아닌 함수도 있기 때문에 nextInt() 다음에 nextLine()을 사용한다면 입력이 제대로 반환되지 않을 수 있다.

코드 (주석o)

import java.util.Scanner;
import java.util.Stack;

public class wordReverse {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int count = Integer.parseInt(sc.nextLine()); //test case 개수 파악

        StringBuilder result = new StringBuilder();

        for (int i = 0; i < count; i++) {
            String sentence = sc.nextLine() + "\n"; //문장 한줄 읽기
            Stack stack = new Stack<>();

            for (int j = 0; j < sentence.length(); j++) {
                if (sentence.charAt(j) == ' ' || sentence.charAt(j) == '\n') { //띄어쓰기 or 문장이 끝났을때
                    while (!stack.empty()) { //스택이 비어있지 않다면
                        result.append(stack.pop()); //현재 스택에 있는 것을 pop해서 결과 스택에 add
                    }
                    result.append(sentence.charAt(j)); //결과 스택에 띄어쓰기 or 엔터 add
                } 
                else {
                    stack.add(sentence.charAt(j)); //다음 띄어쓰기 전까지 문자열 스택에 넣기
                }
            }
        }

        System.out.print(result.toString()); //결과 출력

    }
}

느낀점

처음에는 stack에서 pop하면서 바로 print했는데 이렇게 하니까 시간초과가 뜨길래 결과를 한번에 print하는 방법으로 바꿨다. 그래서 StringBuilder라는 클래스를 사용했다.

profile
그날의 기록

0개의 댓글