2중 포문으로 구현
import java.io.*;
import java.util.Stack;
//stack 문자 뒤집기
//문제
//문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
//
//입력
//첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
//
//출력
//각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
//
//실행과정 중 오류
//문장 전체를 뒤집어야 되는 줄 알고 구현,
//메모리 초과가 나서 확인 해보니 단어 하나씩 뒤집는 것이 문제였음.
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> stack = new Stack<>();
// 몇문장이 들어오는지 input수
int nb = Integer.parseInt(reader.readLine());
for(int i=0; i<nb; i++) {
String input = reader.readLine();
input += "\n";
StringBuilder output = new StringBuilder();
for(int j=0; j<input.length(); j++) {
// 빈칸&엔터가 아닌경우 stack에 넣는다
if(input.charAt(j) != ' ' && input.charAt(j) != '\n' ) {
stack.push(input.charAt(j));
}else {
// 빈칸or엔터 일 경우 stack이 비워질때까지 writer에 담는다
while(!stack.isEmpty()) {
output.append(stack.peek());
stack.pop();
}
if(input.charAt(j) ==' ') {
output.append(input.charAt(j));
}
}
}
writer.write(output.toString()+"\n");
}
reader.close();
writer.flush();
writer.close();
}
}
3중 포문
import java.io.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int inputNum = Integer.parseInt(reader.readLine());
StringBuilder sb = new StringBuilder("");
for(int i=0; i<inputNum; i++) {
// input loop
String[] inputString = reader.readLine().split(" ");
for(int j = 0; j < inputString.length; j++){
Stack<String> chrStack = new Stack<>();
String[] inputChar = inputString[j].split("");
for(String chr : inputChar){
chrStack.push(chr);
}
while(!chrStack.isEmpty()){
sb.append(chrStack.pop());
}
sb.append(" ");
}
sb.append("\n");
}
writer.write(sb.toString());
reader.close();
writer.flush();
writer.close();
}
}

2중포문이 시간 + 메모리 모두 효율적
근데 다른분들 체점 한걸 보니 확실히 python이 빠르고 효율도 좋은것 같다.
파이썬으로 한번 짜봐야겠다.
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [백준] 1158번 JAVA 요세푸스 (0) | 2021.03.31 |
|---|---|
| [백준] 1406번 JAVA (0) | 2021.03.30 |
| [백준] 9012번 JAVA (0) | 2021.03.29 |
| [백준] 9093번 Python (0) | 2021.03.28 |
| [알고리즘] 빅 오 표기법 (0) | 2021.03.17 |