
내가 생각했을때 문제에서 원하는부분
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
내가 이 문제를 보고 생각해본 부분
myStr.split("[abc]") 메서드를 사용하여 문자열을 "a", "b", "c"라는 문자들을 기준으로 나눈다.
이때 구분자 문자는 배열에서 제거되고, 그 사이에 있는 문자들만 배열 요소로 분리된다.
나뉘어진 부분 문자열 배열에서 빈 문자열(즉, 연속된 구분자 사이에 문자 없는 경우)을 걸러내기 위해, 반복문으로 각 요소를 순회하며 빈 문자열이 아닌 경우에만 리스트에 추가한다.
이렇게 하면 두 구분자 사이에 문자가 없을 때 빈 문자열이 결과에 포함되지 않는다.
리스트가 비어 있으면, 즉 "a", "b", "c" 이외의 문자가 전혀 없어서 저장할 substring이 하나도 없으면 ["EMPTY"]라는 배열을 반환한다.
그렇지 않으면, 리스트를 배열로 변환하여 최종 결과로 반환한다.
코드로 구현
import java.util.*;
class Solution {
public String[] solution(String myStr) {
String[] parts = myStr.split("[abc]");
List<String> result = new ArrayList<>();
for (String part : parts) {
if (!part.isEmpty()) {
result.add(part);
}
}
if (result.isEmpty()) {
return new String[]{"EMPTY"};
}
return result.toArray(new String[0]);
}
}
프로그래머스 코드
package programmers;
import java.util.*;
// 프로그래머스 세 개의 구분자
public class Main83 {
public static void main(String[] args) {
Solution12 sol = new Solution12();
// 테스트 예시
String[] result = sol.solution("baconlettucetomato");
System.out.println(Arrays.toString(result)); // [onlettu, etom, to]
result = sol.solution("abcd");
System.out.println(Arrays.toString(result)); // [d]
result = sol.solution("cabab");
System.out.println(Arrays.toString(result)); // [EMPTY]
}
}
class Solution12 {
public String[] solution(String myStr) {
// "a", "b", "c"를 기준으로 문자열 분리
String[] parts = myStr.split("[abc]");
// 빈 문자열은 제외
List<String> result = new ArrayList<>();
for (String part : parts) {
if (!part.isEmpty()) {
result.add(part);
}
}
// 결과가 없으면 ["EMPTY"] 리턴
if (result.isEmpty()) {
return new String[]{"EMPTY"};
}
return result.toArray(new String[0]);
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.