문제 설명
알파벳 대/소문자와 숫자 그리고 구분자인 마침표(.), 쉼표(,), 느낌표(!), 물음표(?), 스페이스()로 이뤄진 문장이 있습니다.
문장 내에는 구분자를 기준으로 단어를 구분합니다.
문장 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)));
}
}
'연습 코딩테스트' 카테고리의 다른 글
연습문제 1-2(5) 배열 0에서 가장 가까운 값 (0) | 2023.03.30 |
---|---|
연습문제 1-2(4) n번째 주문 취소된 주문 번호 구하기 (0) | 2023.03.30 |
연습문제 1-2(3) N개의 최대공약수 구하기 (0) | 2023.03.30 |
연습문제 1-2(1) 전광판 노출 (0) | 2023.03.30 |
연습문제 1-1(5문제 풀이) (0) | 2023.03.28 |