문제 설명

알파벳 대/소문자와 숫자 그리고 구분자인 마침표(.), 쉼표(,), 느낌표(!), 물음표(?), 스페이스()로 이뤄진 문장이 있습니다.

문장 내에는 구분자를 기준으로 단어를 구분합니다.

문장 s가 주어질 때, 각 단어를 거꾸로 뒤집어 모은 문자열 배열을 출력하는 프로그램을 구현하세요.

단, 구분자가 연속으로 나타난 경우에는 그 안에 단어가 없다고 가정하세요. (즉, 빈 단어는 없다고 가정하세요)


입력 형식

  • s: 구분자로 구분된 단어가 모여 있는 문자열

출력 형식

  • 문자열 배열을 반환

제약 사항

  • 1 <= s <= 1000

입출력 예시

  • 입력
    • s = "Hello, World!?"
  • 출력: {"olleH", "dlroW"}
  • 설명: 구분자를 기준으로 Hello, World 두 단어가 있으며, 각 단어를 뒤집어 출력하면 된다.

작성 코드

(8/20)

import java.util.Arrays;

public class test122 {
    public String[] solution(String s) {
    String[] words = s.split("[.,!? ]+"); // 구분자를 기준으로 단어 분리
    String[] reversedWords = new String[words.length];
        for (int i = 0; i < words.length; i++) {
            String word = words[i];
            StringBuilder reversed = new StringBuilder();
            for (int j = word.length() - 1; j >= 0; j--) {
                reversed.append(word.charAt(j)); // 단어를 거꾸로 뒤집기
            }
            reversedWords[i] = reversed.toString();
        }
        return reversedWords;
    }

    public static void main(String[] args) {
        test122 st = new test122();
        String s = "Hello, World!?";
        System.out.println(Arrays.toString(st.solution(s)));
    }
}

이 코드에는 정규 표현식을 사용하여 구분자를 찾아서 문자열을 분리한다.

split() 메서드에 "[.,!? ]+" 라는 정규 표현식을 전달하면,

마침표, 쉼표, 느낌표, 물음표, 스페이스 등의 구분자가 하나 이상 연속해서 나타나는 경우에도

단어로 인식하여 분리한다.

그리고 분리된 각 단어를 StringBuilder를 이용하여 뒤집어서 새로운 문자열 배열에 저장한 후에 반환한다.


정답 코드

import java.util.Arrays;

class Solution {
    public String[] solution(String s) {
        String[] strings = s.split("[.,!? ]");
        return Arrays.stream(strings)
                .filter(word -> !word.equals(""))
                .map(word -> new StringBuilder(word).reverse().toString())
                .toArray(String[]::new);
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        String s = "Hello, World!?";
        System.out.println(Arrays.toString(st.solution(s)));
    }
}