문제설명
문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
my_str과 | n | result |
---|---|---|
"abc1Addfggg4556b" | 6 | ["abc1Ad", "dfggg4", "556b"] |
"abcdef123" | 3 | ["abc", "def", "123"] |
입출력 예 설명
입출력 예 #1
입출력 예 #2
유의사항
풀이
List자료형과 Stringbuffer를 사용하여 해결했다.
List를 사용한 이유이는 선언시에 길이를 정해줄 필요가 없고, 요소 추가나 제거가
간편해서다.
StringBuffer는 문자열의 가공이 편리해서 사용하였다.
1. 빈 ArrayList를 선언, 주어진 문자열을 Stringbuffer에 append.
2. 주어진 길이n으로 문자열을 substring하고 list에 add.
3. 해당 길이만큼 replace를 이용하여 문자열에서 제거.
4. 반복.
5. 남은 문자열의 길이가 n보다 작거나 같을 때, 남은 문자열을 list에 add해준 뒤, 반복문 종료.
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<String> solution(String my_str, int n) {
List<String> list = new ArrayList<>();
StringBuffer sb = new StringBuffer(my_str);
for (int i = 0; i < my_str.length(); i++) {
if (sb.length() > n) {
list.add(sb.substring(0, n));
sb.replace(0, n, "");
System.out.println(sb);
} else {
list.add(sb.toString());
break;
}
}
return list;
}
}
번외 코드: 정규식으로 문자열 절삭
정규식으로 n만큼 길이로 자르고 나머지는 그대로 배열에 추가한다. 식이 간단해서 마음에 들지만`
?<=\\G 이부분을 이해하지 못해 사용하지 않았다. 나중에 찾아보기 위해 이곳에 기록해 둔다.
class Solution {
public String[] solution(String my_str, int n) {
String[] answer = my_str.split("(?<=\\G.{"+n+"})");
return answer;
}
}
참고