본문 바로가기
Baekjoon/[1] 자료구조

[백준] 9093번 단어 뒤집기 JAVA (자바) 풀이

by Poorm 푸름 2023. 6. 15.

문제 9093번

 : 문장의 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. (단, 단어의 순서는 바꿀 수 X)

 

 [입력]

 

 : 첫째 줄에 테스트 케이스 개수 T가 주어진다 
 : 각 테스트 케이스는 한 줄로 이루어져 있다 (문장이 하나)
 : 단어와 단어 사이에는 공백이 하나 있다
 : 예) I love you

 

 [출력]

 

  : 주어진 문장의 단어를 모두 뒤집어 출력
  : 예) I evol uoy

 

 [스택 연산]

 

  init()  스택을 초기화
  create()  스택을 생성
  is_empty(s)  스택이 비어있는지 검사
  is_full(s)  스택이 가득 찼는지 검사 
  push(e)  스택의 맨 위에 요소 e 추가
  pop(s)  스택의 맨 위 요소를 삭제
  peek(s)  스택의 맨 위 요소를 삭제하지 않고 반환
  top()  스택 맨 위에 있는 데이터 값 반환
  push()  스택에 데이터 삽입
  pop()  스택에서 데이터 삭제하여 반환
  isEmpty()  스택에 원소가 없으면 'True', 있으면 'False' 값 반환
  isFull()  스택에 원소가 없으면 'False', 있으면 'True' 값 반환

 

 [코드]

import java.util.*;
import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());
		Stack<Character> stack = new Stack<>();
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		while(t-- > 0) {
			String s = br.readLine()+"\n";
			for(char c : s.toCharArray()) {
				if(c == ' ' || c == '\n') {
					while(!stack.isEmpty()) {
						bw.write(stack.pop());
					}
					bw.write(c); // 공백
				} else
					stack.push(c);
			}
		}
		bw.flush();
	}
}

 

 [해설]

 

 : Stack<Character> stack = new Stack<>(); 으로 스택선언 
   문자 하나씩 볼 때엔 Character로 선언

 

 : for(a:b) 는 b에 a를 담는 것

   즉 for(char c : s.toCharArray())

        = s.toCharArray에 char c 를 담는 것 = 문자열 s 배열에 문자 c를 추가한다

   *  toCharArray()

       = String 문자열을 char 문자로 쪼개서 순서대로 배열에 넣어주는 매서드

                             

  : if(c == ' ' || c == '\n') 는 문자에 공백이나 줄바꿈이 있으면 아래 명령을 수행한다

 

  : !stack.isEmpty()는 스택이 비어있지 않을 때 수행 (즉 비어있을때까지 반복)

 

  : bw.write(stack.pop()); 
    pop은 선입후출이므로 거꾸로 문자가 나간다
    ex) l-o-v-e입력, 출력은 e-v-o-l이다

 

  : bw.write(c);
    여기서 부터는 while문이 끝났다 스택이 비었다는 것 = 공백 

    공백은 공백대로 출력한다      
                    

  : stack.push(c);
    그 다음 공백 만나기전까지 다음 문자들을 스택에 넣어주기

 

 

                                                         

이제 풀어보러 갈께요 :)

 

 

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

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *