본문 바로가기

Algorithm

[Java] 백준 9093번 : 단어 뒤집기

1. 문제

2. 풀이 

 

  • nextInt()로 테스트 케이스 입력값을 주고 입력을 하게 되면 nextInt()는 띄어쓰기를 기준으로 입력값을 받고,
  • 개행 문자인 \n이 그대로 남아있어서 다음 nextLine() 쓰면 nextLine()이 한 줄이 씹히게 된다. 그것을 방지하고자 scanner.nextLine()을 형 변환하여 두 개로 인식하게 정수로 바꾸어 저장해준 것이다.  
  • 테스트 케이스만큼 도는 포문을 만들고 포문 안에서 nextLine()으로 입력을 받는다.
  • 입력받은 한줄을 단어마다 뒤집기 위해서 str.split(" ") 공백 기준으로 나누어 String배열에 담는다.
  • forEach를 활용해서 한 단어 씩 넣어 대입하고 StringBuilder를 만들어서 그 안에 넣어준다. 두 번째 sb.Builder에서 문자를 뒤집고 공백을 붙여 첫 번째 StringBuilder에 저장한다.
  • 여기서 StringBuider를 2개 활용한 이유는 단어를 중간에 공백 기준으로 뒤집은걸 ForEach가 반복하면서 두 번째 StringBuilder안에 담겨 있는 값을 초기화해서 붙여주는 방식이다. 
  • 테스트 케이스 만큼 도는 for문 끝나기 전에 ("\n") 줄 바꿔 주어 출력하며 된다.

 

3. 코드 (StringBuilder활용)

package baekjoon;

import java.util.*;

public class Q9093 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine());
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < n; i++) {
            String str = scanner.nextLine();
            String[] splits = str.split(" ");

            for (String s : splits) {
                StringBuilder sb = new StringBuilder(s);
                answer.append(sb.reverse()).append(" ");
            }
            answer.append("\n");
        }
        System.out.println(answer);
    }
}