백준 알고리즘
5. 9093번 단어 뒤집기 ( java )
Romenest
2021. 9. 2. 11:33
package com.example;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Stack;
public class training3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
while(a>0){
Stack<Character> stack = new Stack<>();
String string = br.readLine();
for(int i=0; i<string.length(); i++){
char c = string.charAt(i);
if(c == ' '){ //i번째가 공백일 경우 아래 반복문 실행
while(!stack.empty()){ //만약 스택에 정보가 있을경우 최상위 pop ---- 2번
System.out.print(stack.pop()); //각 반복문,조건문안의 print는 줄바꿈 x
}
System.out.print(" "); //스택에 정보없을 경우 " " 공백 출력
}
else{ //i번째가 공백이 아닐경우
stack.add(c); 스택에 c(문자열) 의 i번째를 저장 -----1번
}
}
while (!stack.empty()) { // 위 반복문 실행후 스택이 비어있지 않다면
System.out.print(stack.pop()); // 최상위에있는 스택 출력
}
System.out.println(" "); //마지막은 결과물이 출력후 줄바꿈 o
a--; // 명령수 -1
}
}
}
if문은 사실상 1번 - > 2번 순으로 작동됨
예를 들어
abcd □ abcd □ abcd일경우 첫번째 if문 while문에서는 공백을 만났을때 중간의 빈곳 두곳을 판별
i번째 글자가 □ (공백) 이다 . 그렇다면 조건을 한번더 걸어서
스택에 정보가 쌓여있을때만 스택의 정보를 pop 그리고 □ 출력
이유는 abcd 이후 □ 를 출력해주지않는다면
결국 다시 실행했을때 abcdabcd 와같이 붙어서 나오기 때문
이후 for반복문 이 끝나고
줄바꿈을 위해 println을 사용하기 위한 새로운 while문 작성
이후 a--로 초기 선언한 명령인 a의 수를 감소
결과