Contents

잘라서 배열로 저장하기(with.Java)

   Apr 24, 2024     2 min read

“잘라서 배열로 저장하기(with.Java)” 문제에 대하여 알아본 글입니다.

코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다.

문제에 대해 먼저 알아보겠습니다.

문제

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

제한사항

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

입출력 예시

my_strnresult
“abc1Addfggg4556b”6[“abc1Ad”, “dfggg4”, “556b”]
“abcdef123”3[“abc”, “def”, “123”]

문제에 대한 나의 풀이

class Solution {
    public String[] solution(String my_str, int n) {
        int length = my_str.length();
        int arrayLength = (int) Math.ceil((double) length / n);

        String[] answer = new String[arrayLength];

        for (int i = 0; i < arrayLength; i++) {
            int start = i * n;
            int end = Math.min(start + n, length);
            answer[i] = my_str.substring(start, end);
        }

        return answer;
    }
}

풀이 설명

  • 문자열 길이 계산: 주어진 문자열의 길이를 계산하여 length 변수에 저장합니다.
  • 나눌 배열의 길이 계산: 문자열을 나눌 배열의 길이를 계산하기 위해 문자열 길이를 주어진 길이로 나눈 뒤, 올림 연산을 수행하여 나머지가 발생하면 하나의 배열을 추가합니다. 이 값을 arrayLength 변수에 저장합니다.
  • 결과를 저장할 배열 생성: arrayLength 길이의 문자열 배열을 생성하여 answer 변수에 저장합니다.
  • 문자열을 일정 길이로 나누어 배열에 저장: for 루프를 통해 문자열을 일정 길이로 나누고, 각 부분 문자열을 answer 배열에 저장합니다. 시작 인덱스는 i * n으로 계산하고, 종료 인덱스는 start + n이지만, 만약 마지막 부분이라면 문자열 길이보다 클 수 없으므로 Math.min을 사용하여 두 값 중 작은 값을 선택합니다.
  • 결과 배열 반환: 나누어진 부분 문자열이 저장된 answer 배열을 반환합니다.

코드 장점

  • 일정 길이로 문자열을 나누는 유연성: 주어진 문자열을 원하는 길이로 나누어 배열에 저장할 수 있는 일반적인 방법을 제공합니다.
  • 문자열의 길이에 따라 배열의 크기를 동적으로 조정: 입력 문자열의 길이에 따라 배열의 크기를 동적으로 조정하여 메모리를 효율적으로 사용합니다.

코드 단점

  • 문자열 길이에 따라 배열 크기가 달라질 수 있음: 문자열의 길이와 주어진 길이에 따라 배열의 크기가 달라지므로, 예상치 못한 메모리 사용량을 초래할 수 있습니다.
  • 나누어진 부분 문자열의 배열에 대한 불변성: 한 번 나누어진 부분 문자열이 저장된 배열은 변경할 수 없으며, 나중에 해당 부분 문자열을 수정할 수 없습니다.