본문 바로가기
Algorithm

백준 9093번 <단어 뒤집기>

by seungh2 2020. 8. 24.

백준 알고리즘 9093번

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

 

9093번: 단어 뒤집기

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

www.acmicpc.net

옛날에 들었던 코드 플러스의 "알고리즘 기초"강의에 있는 문제들을 풀어보기로 생각하면서 결정한 첫 문제

 

단어 뒤집기 solved.ac에서 브론즈 1인 문제다. 쉬운 거!!! 아마도..?

(사실 브론즈 1이 쉬운 건지 브론즈 5가 쉬운 건지 잘 모르겠다ㅎㅎ 브론즈니까 실버보다 쉽지 않을까..ㅎㅎ)


9093번

입력으로 들어오는 문장에서 단어를 뒤집어서 출력하는 프로그램이다.

만약 입력으로 "I am happy"가 들어오면 출력은 "I ma yppah"이다.


문제 해결

Stack을 Character형으로 만들어 사용했다.

charAt()을 사용하여 Stack에 문장의 구성요소?를 하나씩 다 넣고 빼내는 식으로 구현했다.

String형으로 temp와 result를 사용할 건데 temp는 뒤집어져 있는 단어들을 저장할 임시 공간이고 result에는 완성된 문장을 저장할 것이다.

이때 Stack에서 빼낸 character가 ' '(공백)이 아니면 temp에 누적해두었고.

' '(공백)이라면 result뒤에 공백을 붙이고 그 뒤에 temp를 붙였다.

이렇게 하면 정답이 나올 거 같았는데 첫 단어가 생략돼서 출력이 된다.

문장의 공백 수는 단어의 수 -1이기 때문에 for문을 빠져나와서 result뒤에 공백을 붙이고 그 뒤에 temp를 붙여주는 작업을 한번 더 해주면 정답이 나온다.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuffer sb = new StringBuffer();

		int testcaseNum = Integer.parseInt(br.readLine());

		LinkedList<String> strList = new LinkedList<String>();

		for (int i = 0; i < testcaseNum; i++) {
			String str = br.readLine();
			strList.add(str);
		}

		for (int i = 0; i < testcaseNum; i++) {
			Stack<Character> stack = new Stack<Character>();
			String str = strList.get(i);
			int length = str.length();

			for (int k = 0; k < length; k++) {
				stack.push(str.charAt(k));
			}

			String result = "";
			String temp = "";
			for (int k = 0; k < length; k++) {
				char a = stack.pop();
				if (a == ' ') {
					result = temp + " " + result;
					temp = "";
				} else {
					temp += a;
				}
			}
			result = temp + " " + result;
			sb.append(result);
			sb.append("\n");
		}

		System.out.println(sb.toString());

	}

}

결과


 저번에 <스택 수열>문제를 풀 때 사용한 BufferedReader와 StringBuffer를 사용했다.

728x90

'Algorithm' 카테고리의 다른 글

백준 1158번 <요세푸스 문제>  (0) 2020.08.26
백준 10845번 <큐>  (0) 2020.08.26
백준 1406번 <에디터>  (0) 2020.08.25
백준 1874번 <스택 수열>  (0) 2020.08.20
백준 1085번 <직사각형에서 탈출>  (0) 2020.07.19

댓글