Blog

잘라서 배열로 저장하기

문제 #

문제 설명을 적는다.

  • 제한사항

나의 풀이 #

class Solution {
    public String[] solution(String my_str, int n) {
        StringBuilder sb = new StringBuilder(my_str);
        
        int cnt = 1;
        while(true) {
            if(n*cnt+cnt <= sb.length()) {
                sb.insert(n*cnt+cnt-1, " ");
                cnt++;
            } else break;
        }
        
        my_str = sb.toString();
        
        String[] answer = my_str.split(" ");
        return answer;
    }
}

다른 사람의 풀이 #

// substring 이용1
class Solution {
    public String[] solution(String my_str, int n) {
        int resultCnt = (my_str.length() + n - 1) / n;
        String[] answer = new String[resultCnt];

        for (int i = 0; i < resultCnt; i++) {
            int start = n * i;
            int end = start + n >= my_str.length()? my_str.length(): start + n;
            answer[i] = my_str.substring(start, end);
        }

        return answer;
    }
}

// substring 이용2
class Solution {
    public String[] solution(String my_str, int n) {
        String[] answer = {};

        if (my_str.length() % n == 0) answer = new String[my_str.length() / n];
        else answer = new String[my_str.length() / n + 1];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = (i * n + n <= my_str.length() - 1 ? my_str.substring(i * n, i * n + n) : my_str.substring(i * n));
        }

        return answer;
    }
}

//List 이용
import java.util.*;

class Solution {
    public String[] solution(String my_str, int n) {
        List<String> list = new ArrayList<>();
        String cut = "";

        for(int i =0; i<my_str.length(); i++){
            cut += my_str.charAt(i);
            if(cut.length() == n || i+1 == my_str.length()){
                list.add(cut);
                cut = "";
            }
        }
        String[] answer = new String[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        return answer;
    }
}

//List 및 Stream 이용
import java.util.List;
import java.util.ArrayList;

class Solution {
    public String[] solution(String my_str, int n) {
        List<String> answer = new ArrayList<>();
        String str = "";
        for(int i=0; i<my_str.length(); i++){
            str += my_str.charAt(i);
            if(str.length() == n || i == my_str.length()-1){
                answer.add(str);
                str = "";
            }
        }

        return answer.stream().map(s -> s).toArray(String[]::new);
    }
}

관련개념 학습 #

String

StringBuilder / StringBuffer

class Solution {
    public String[] solution(String my_str, int n) {
        String[] answer = my_str.split("(?<=\\G.{"+n+"})");

        return answer;
    }
}
  1. str.substring을 이용한다.

  2. str.charAt을 이용한다.

  3. StringBuilder 혹은 StringBuffer를 이용한다.

  4. 배열의 크기를 미리 구한다.

  5. 크기가 가변적인 배열인 List를 이용한다. → 배열의 크기를 미리 구하는 대신 List배열에 넣은 후 배열로 변환하는 방식

  6. str.split를 이용한다. → sb.insert 혹은 str.charAt으로 공백(혹은 특문)이 포함 된 새로운 문자열을 만들어 자르는 방식