728x90
9093번. 단어 뒤집기
문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
첫 시도 코드
- 콘솔 출력 답은 맞았는데, 메모리 초과가 떴다.
- 메모리 커질수록 시간은 줄고, 시간이 늘어날수록 메모리는 적어진다.
- 다시 풀자.
package to_0502;
import java.util.*;
/* 9093번. 단어 뒤집기 - 스택 사용 -(1) 답은 맞았는데. 메모리 초과 ㅠ
* */
public class Main {
//솔루션 함수
public String solution(String str) {
String answer= "";
Stack<Character> st = new Stack<>();
for(String x : str.split(" ")) {
char[] tmp = x.toCharArray();
for(int i=0; i<tmp.length; i++) {
st.push(tmp[i]);
}
while(!st.isEmpty()) {
answer += st.pop();
}
answer += " ";
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Main T = new Main();
Scanner kb = new Scanner(System.in);
int tc = Integer.parseInt(kb.nextLine());
String[] tmp = new String[tc];
for(int i=0; i<tc; i++) {
tmp[i] = kb.nextLine();
}
for(int i=0; i<tc; i++) {
System.out.println(T.solution(tmp[i]));
}
}
}
완성 코드
- 모두 main에서 코드를 짰고, BufferedReader와 Writer 로 입출력을 대체했다.
- 1) 각 입력받은 문장 맨 뒤에는 끝을 알리는 \n개행 문자를 추가한 뒤
- 2) 각 문자가 공백 or 개행문자인 경우 pop() 하고, 아닌 경우 push()
import java.io.*;
import java.util.*;
public class Main {
//입출력 변수
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//실행 메인
public static void main(String[] args) throws IOException{
int t = Integer.parseInt(br.readLine());
while(t--> 0) {
Stack<Character> st = new Stack<>();
//끝을 알리는 \n개행 문자 담고
String str = br.readLine() + "\n";
for(char x : str.toCharArray()) {
if(x == ' ' || x =='\n') {
while(!st.isEmpty()) {
bw.write(st.pop());
}
bw.write(x);;
}else st.push(x);
}
}
bw.flush();
}
}
728x90
'코딩 테스트 [준비] > [문풀] Baekjoon_백준 문풀_조지기' 카테고리의 다른 글
백준 | 10773번. 제로, 1764번. 듣보잡 문제 풀이 (0) | 2023.05.02 |
---|---|
백준 | 11866번. 요세푸스 문제 0 문제 풀이 (0) | 2023.05.02 |
백준 | 9012번. 괄호 문제 풀이 (0) | 2023.05.02 |
백준 | 2164번. 카드 2 문제 풀이 (0) | 2023.05.02 |
백준 11053번. 가장 긴 증가하는 부분 수열 문제풀이 (0) | 2023.04.24 |