9093문제 단어 뒤집기 Java

2021. 9. 18. 11:38알고리즘/백준 알고리즘기초

반응형

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

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

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

 

##문제이해##

결국 입력받은 문자열을 뒤집어서 기존자리에 넣어줘야하는데 그걸 어떻게 할것인가가 포인트인것같다.

스택을 몰랐을때는 문자열마다 for문을 거꾸로 돌려서 집어넣는 작업을 해야하는데.. 그걸 스택에 넣었다가 빼면 동일한 형태로 작업이된다.

 

##코드##

 

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

public class boj_9093 {
	public static void main(String[] args) {
		Stack<String> stack = new Stack<>();
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		sc.nextLine(); // \n때문에 추가한부분
		//N번 만큼 반복
		for(int z=0; z<N; z++) {
			//다음줄 받아서 배열로 저장.띄어쓰기로 각 단어 변환시킴.
			String str = sc.nextLine();
			String[] strArr = str.split(" ");
			//1번 변환
			for(int i=0; i<strArr.length;i++) {
				//한글자가 아니면 스택에 넣어서 글자 거꾸로 변환
				if(strArr[i].length()==1) {
					continue;
				}else {
					StringBuffer sb = new StringBuffer();
					for(int j=0; j<strArr[i].length();j++) {
						stack.push(String.valueOf(strArr[i].charAt(j)));
					}
					while(!stack.empty()) {
						sb.append(stack.pop());
					}
					strArr[i]=sb.toString();
				}
			}
			//출력
			StringBuffer sb = new StringBuffer();
			for(String s: strArr) {
				sb.append(s+" ");
			}
			System.out.println(sb);
		}

	}

}
반응형