코딩테스트

[프로그래머스/Java] 잘라서 배열로 저장하기

서리/Seori 2023. 4. 10. 18:18

* 프로그래머스 > 코딩테스트 입문
* 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120913

 

 

 

[문제 설명]
문자열 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"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.

 

 

Solution.java

class Solution {
    public String[] solution(String my_str, int n) {
        
        //만들어질 배열의 개수 알아내기
        int arrNum=my_str.length()%n == 0 ? my_str.length()/n : my_str.length()/n+1;
        
        //얻어낸 배열의 개수로 String 배열 생성
        String[] answer=new String[arrNum];
       
        //배열의 개수만큼 반복문 돌기
        for(int i=0; i<arrNum; i++){
            //문자열의 개수가 n보다 크거나 같으면
            if(my_str.length() >= n){
                //배열에 n개씩 자른 값 저장
                answer[i]=my_str.substring(0, n);
                //my_str을 수정하기
                my_str=my_str.substring(n, my_str.length());
                
            //문자열의 개수가 n보다 작으면
            }else{
                answer[i]=my_str.substring(0, my_str.length());
            }
        }    
        return answer;
    }
}

 

str.substring(a,b) 

- 문자열 str의 a번째 인덱스에서부터 b번째 인덱스 직전까지 추출한다.

 

- 주어진 매개변수 my_str 을 잘라낸 이후의 문자열로 수정해주고 다시 반복문을 돌린다.

 

 


 

 

** 다른 분들의 풀이 참고!

 

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() 에서 사용할 인덱스 값을 start, end 변수로 정의해서 반복문을 돌 때마다 이 값이 변경되게 해주었다.