HS_development_log

백준 9093번 - 단어 뒤집기 / Java 본문

Algorithm-백준/문자열처리

백준 9093번 - 단어 뒤집기 / Java

DevHyeonseong 2020. 1. 15. 16:10
반응형

문제

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

 

9093번: 단어 뒤집기

문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다. 출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어

www.acmicpc.net

문자열을 다루는 문제.

보는 순간 떠오른 두 개의 풀이가 있었다.

1. 스택을 활용해 단어를 뒤집는다

2. 자바의 String 관련 라이브러리를 활용하여 뒤집는다

 

1번은 단어를 계속 push 하다가 빈칸이 나오면 pop을해서 출력해주는 간단한 방법

필자는 2번 알고리즘을 사용하여 풀이를 진행했다.

 

알고리즘

  1. split 메서드를 사용하여 빈칸을 기준으로 스트링 배열을 만든다
  2. StringBuilder의 reverse메서드를 사용하여 배열 요소마다 뒤집는다.

소스코드 및 설명

 

1,2번 알고리즘

1
2
3
4
5
6
7
8
for(int i=0;i<list.size();i++) {
            String[] str = list.get(i).split(" "); // 공백을 기준으로 단어를 자른다
            StringBuilder revStr = new StringBuilder();
            for(int j=0;j<str.length;j++) {
                revStr.append(new StringBuilder(str[j]).reverse()+" "); // 뒤집어서 붙인다
            }
            answer.add(revStr.toString().trim()); // 앞뒤공백제거
        }
cs

전체 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.*;
/*
 * BOJ 9093
 * 2020.01.15
 * Hyeonseong
 */
public class BOJ9093 {
 
    public static void main(String[] args) {
        Solution s = new Solution();
        s.solution();
    }
}
class Solution{
    
    int n; // 테스트케이스 수
    ArrayList<String> list; // 입력받는 문장
    ArrayList<String> answer; // 정답
    Solution(){
        Scanner scan = new Scanner(System.in);
        list = new ArrayList<String>();
        answer = new ArrayList<String>();
        n = scan.nextInt();
        scan.nextLine();
        for(int i=0;i<n;i++) {
            list.add(scan.nextLine());
        }
    }
    public void solution() {
        for(int i=0;i<list.size();i++) {
            String[] str = list.get(i).split(" "); // 공백을 기준으로 단어를 자른다
            StringBuilder revStr = new StringBuilder();
            for(int j=0;j<str.length;j++) {
                revStr.append(new StringBuilder(str[j]).reverse()+" "); // 뒤집어서 붙인다
            }
            answer.add(revStr.toString().trim()); // 앞뒤공백제거
        }
        for(String s : answer) {
            System.out.println(s); // 출력
        }
    }
}
 
 
cs

 

반응형