주니어 기초 코딩공부/JAVA_programmers_코딩테스트

잘라서 배열로 저장하기_programmers_lev00

jju_developer 2022. 12. 17. 19:48
728x90

<코딩 테스트>

문자열 my_str과 n이 매개변수로 주어질 때, 

my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

 

<나의 풀이 과정>

처음에 오류난 코드 중, 길이 설정을 String[] answer = new String[my_str.length()%n]; 이렇게 하고

substring을 이용할때에도 answer[i] = my_str.substring(i, n);

으로 설정했었습니다.

이렇게 설정을 하니, 출력 될때 자꾸만 잘리는것이 ["abc1Ad", "bc1Ad", "c1Ad"]

이렇게 나왔었습니다.

이를 해결하기 위해서 startIndex 와 endIndex를 지정해주었습니다.

startIndex += n; 인덱스를 자를 시점은 내가 원하는 길이인 n개만큼 더한 수를 자르도록 지정했으며,

어디까지 문자열을 자를것인지에 대한 해답은

만약 자르는것이 6으로 시작했을때 0~6, 7~12 이렇게 endIndex에 + n 을 더한 값으로 출력하고

그 마지막 인덱스가 문자열의 길이를 초과하지 않도록 설정하였습니다.

 

<나의 풀이 코드>

class Solution {
    public String[] solution(String my_str, int n) {
		int length = my_str.length() % n == 0 ? my_str.length() / n : my_str.length() / n + 1;
		int startIndex = 0;
		int endIndex = n;
		String[] answer = new String[length];

		for (int i = 0; i < answer.length; i++) {
			answer[i] = my_str.substring(startIndex, endIndex);
			startIndex += n;
			endIndex = (endIndex + n) > my_str.length() ? my_str.length() : endIndex + n;
		}
			for (String string : answer) {
			System.out.print(string + ",");
		}
		return answer;
	}
}

 

<다른 사람 풀이>

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;
    }
}

<다른 사람 풀이>

 

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);
    }
}

 

 

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120913

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90