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

febCho·2024년 5월 17일
0

코딩테스트

목록 보기
198/253
post-thumbnail

문제

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

- 제한사항

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

풀이

n씩 자르고 남은 나머지도 한 인덱스에 넣어 주어야 했기 때문에 경우의 수를 나누어 문자열 배열 answer의 길이를 다르게 했다. 그리고 StringBuffer 객체를 사용해 잘라낸 문자열 my_str을 append()로 누적하되, 그 길이가 n과 같아진다면 answer에 저장, 외부에서 선언한 인덱스 값을 +1 하고, 버퍼 객체는 setLength()를 사용해 초기화 해주었다.

그리고 n씩 나뉘어 떨어지지 않아 버퍼 객체에 my_str의 요소들이 남아 있을 경우 answer의 마지막 인덱스에 추가적으로 대입해 주었다. 버퍼 객체 역시 isEmpty()가 사용 가능하나 toString()으로 문자열 형변환 후 사용해야 한다는 점을 알게 되었다. 그런데 지금 보니 그냥 if(!sb.length() == 0) 이렇게 해도 되었을 것 같다는 생각^^;

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];
        }
        
        StringBuffer sb = new StringBuffer();
        int idx = 0;
        
        for(int i=0; i<my_str.length(); i++){
            sb.append(my_str.charAt(i));
            
            if(sb.length() == n){
                answer[idx] = sb.toString();
                idx++;
                sb.setLength(0);
            }
        }
        
        if(!sb.toString().isEmpty()) answer[idx] = sb.toString();
        
        return answer;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글