Tech Log 🛠️

백준9093) 단어 뒤집기를 푸는 두가지 방법 본문

알고리즘

백준9093) 단어 뒤집기를 푸는 두가지 방법

sehaan 2023. 1. 14. 23:47

1) StringBuilder 를 이용

입력받은 문자열을 공백을 기준으로 split 해준 뒤 , 문장 배열에 넣어준다.

이 문장 배열에 있는 문자열들을 차례대로 뒤집어 주고 다시 StringBuilder를 이용하여 붙여준다.

 

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        sc.nextLine();
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<num;i++){
            String str = sc.nextLine();
            String[] str_ = str.split(" ");
            for(String s : str_){
                StringBuilder reverse = new StringBuilder(s);
                sb.append(reverse.reverse());
                sb.append(" ");
            }
            sb.append("\n");
        }
        System.out.println(sb);

    }
}

2)

입력받은 문자열의 글자 하나하나를 스택에 넣어준다. 만약 공백이 발견될 경우 스택에 넣지 않고 현재까지 넣었던 문자들을 

다시 꺼내준다. 

스택은 선입후출 개념이기 때문에 문자열을 반대로 배치할 수 있다.

 

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < num; i++) {
            StringBuilder sb = new StringBuilder();
            Stack s = new Stack();
            String str = sc.nextLine();

            for (int j = 0; j < str.length(); j++) {
                if (str.charAt(j) == ' ') {
                    while (!s.isEmpty()) {
                        sb.append(s.pop());
                    }
                    sb.append(" ");
                } else {
                    s.push(str.charAt(j));
                }
            }
            while (!s.isEmpty()){
                sb.append(s.pop());
            }

            System.out.println(sb);

        }

    }
}