프로그래머스 코딩(자바)/Level 0

Programmers Level 0 - 잘라서 배열로 저장하기

kjwc 2023. 3. 6. 15:02
728x90

문제 설명

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

 
제한사항
  • 1 ≤ my_str의 길이 ≤ 100
  • 1 ≤ n  my_str의 길이
  • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

 

 

입출력 예

my_str n result 
"abc1Addfggg4556b" 6 ["abc1Ad", "dfggg4", "556b"]
"abcdef123" 3 ["abc", "def", "123"]

입출력 예 설명

입출력 예 #1

  • "abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.

입출력 예 #2

  • "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.

유의사항
  • 입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
    public String[] solution(String my_str, int n) {
        
        String[] answer = new String[(my_str.length()-1)/+ 1];
        for(int i=0;i<answer.length;i++){
            if((i+1)*n<my_str.length()){
                answer[i] = my_str.substring(i*n, (i+1)*n);
            }else{
                answer[i] = my_str.substring(i*n);
            }            
        }
        return answer;
    }
}
cs

 

  배열의 크기를 정하고 
  String[] answer = new String[(my_str.length()-1)/n + 1];

  for 반복문으로 배열의 길이 만큼 반복하면서

  substring(from, to) : from ~ to-1까지의 문자열을 잘라서 반환한다. 
  substring(from,) : from ~ 끝까지의 문자열을 잘라서 반환한다. 

  마지막 글자는 n의 길이가 되지 않을 수 있기때문에  남아있는 문자열 길이를 판단하여 처리 하였다.

 

1
2
3
4
5
6
7
8
import java.util.stream.IntStream;
class Solution {
    public String[] solution(String my_str, int n) {
        return IntStream.range(0, (my_str.length()-1)/+ 1)
               .mapToObj(v -> v==my_str.length()/n ?
my_str.substring(v * n) : my_str.substring(v * n, (v + 1* n))
                .toArray(String[]::new);
    }
}
cs

 

 위의 문제를 Stream으로 해결 하였다.

 

1
2
3
4
5
class Solution {
    public String[] solution(String my_str, int n) {
        return my_str.split("(?<=\\G.{" + n + "})");
    }
}
cs

 

  n글자씩 잘라내는 정규 표현식을 사용하였다.

 

728x90