기초 알고리즘 - 단어 뒤집기(2)

Code_Alpacat·2021년 9월 28일
0

기초 알고리즘!

목록 보기
2/19

단어 뒤집기 문제다.

  1. 첫 줄에 테스트 케이스 T를 입력받는다.
  2. 다음 줄 부터는 공백단위로 문장을 입력받고, 입력받은 문자열의 순서를 바꾼다.

어려울게 없는 문제다.
나는 공백 단위로 입력을 받지만 얼만큼의 공백을 입력받는지는 모르기때문에 hasMoreTokens를 이용해 반복해줬다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Hello_world {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		
		while(T-- >0) {
			
			st = new StringTokenizer(br.readLine()," ");
			while(st.hasMoreTokens()) {
			StringBuilder tmp = new StringBuilder();
				tmp.append(st.nextToken());
				sb.append(tmp.reverse());
				sb.append(" ");
			}
		}
		System.out.println(sb.toString());
	}

}

팁은 각각 다른 StringBuilder의 공간에 값들을 저장하는 것이다. sb는 뒤집은 값의 출력을 위해서, tmp는 입력받은 값을 위해서 각자 append 한다. tmp에 입력을 받자마자 다음 공백이 오기 전에 reverse해서 출력할 sb에 미리 저장해두는 것이다.

다음은 스택을 활용한 방법이다.

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

public class Hello_world {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Stack<Character> stack = new Stack<Character>();
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		
		while(T-- >0) {
			String str = br.readLine() +"\n";
			for(char ch : str.toCharArray()) {
				if(ch ==' ' || ch == '\n') {
					while(!stack.isEmpty()) {
						sb.append(stack.pop());
					}
					sb.append(ch);
				} else {
					stack.push(ch);
				}
			}
		}
		System.out.println(sb);
	}

}

원리 자체는 쉽다.
1.char을 받는 stack을 호출해온다.
2.한 줄을 그대로 입력받는다.
3.입력받은 줄을 전부 toCharArray로 한 글자씩 검증한다.
4.공백이나 다음 줄에 해당하기 전까지는 계속해서 stack.push를 통해 ch에 스택으로 쌓아간다. 그리고 공백을 만나면 ch전부를 pop으로 뱉어내고 공백ch를 저장한다.
5.pop은 stack이 남는 공간없이 isEmpty를 통해 남김없이 뱉어낸다.

profile
In the future, I'm never gonna regret, cuz I've been trying my best for every single moment.

0개의 댓글

관련 채용 정보