Jam's story

[프로그래머스] 잘라서 배열로 저장하기 java 본문

코딩테스트/프로그래머스

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

애플쩀 2022. 12. 13. 20:17

 

package lv0;

public class 잘라서배열로저장하기 {
    public static  String[] solution(String my_str, int n) {
        int len=(int) Math.ceil((double)my_str.length()/n);
        int strlen=my_str.length();
        System.out.println("len: "+len);
        System.out.println("my_str: "+strlen);
        String[] answer = new String[len];
      
        for (int i = 0, j=0; j<len; i+=n, j++, n+=n) {
        	System.out.println("i: "+i+", n: "+n+", j: "+j);
        	if(n>my_str.length()) {	
        		System.out.println(i);
        		i-=n;
        		 System.out.println(i+", "+strlen);
        		answer[j]=my_str.substring(i,strlen);
        		}
        	else {answer[j]=my_str.substring(i,n);
        		System.out.println(answer[j]);
        	}
        	
        	
		}
        return answer;
    }
    public static void main(String[] args) {
    	String my_str="abc1Addfggg4556b";
    	int n=6;
    	solution(my_str, n);
    }
}

 

 

내가 틀렸던 이유를 알게됨

Math.ceil은 올림하는 함수이며  소숫점이 있어야 올림을 할 수 있는데

  System.out.println((double)my_str.length()/n);
  System.out.println(my_str.length()/n);


밑에는 정수형으로 결과값이 나오니 올릴게 없는 것이다.

 

 

다시풀기(정답)

substring 해줄 start값과 end값을 변수로 선언한다.

start+n = end 값이  길이 끝값을 넘어가면 end는 my_str.length()

넘어가지 않는다면 end는 start+n

package lv0;

import java.util.Iterator;

public class Main{
    public static String[] solution(String my_str, int n) {
    	//리턴할 배열의 크기를 정하기 위해 길이 변수 구하기 
    	//my_str.length()/n은 int형이어서 소수점이 안나오기에 올림을 할 수 없다. 
    	//그래서 double 형으로 바꾼후에 int 형으로 다시 바꿔준다. 
    	int len =(int) Math.ceil((double)my_str.length()/n);
    	//답을 반환해줄 String 배열 선언 
    	System.out.println(len);
    	String[] answer=new String[len];
    	
    	for (int i = 0; i < answer.length; i++) {
    		//substring 을 해줄 start와 end 변수 선언 
    		//start에서 +가 아닌 *를 해주는 이유
    		//만일 + 라면, i=0, start=6 / i=1, start=7 
    		//*로 해야 i=0, start=0 / i=1, start=6
    		int start= i*n;
    		int end=start+n;
    		
    		//end 값을 조건에 따라 지정해주자 
    		//끝값이 my_str과 같거나 넘어간다면 end를 my_str.length()로 
    		if(start+n>=my_str.length()) {
    			end=my_str.length();
    		}else {
    			end=start+n;
    		}
    		answer[i]=my_str.substring(start,end);

		}
    	return answer;
    	
    }
    public static void main(String[] args) {
    	String my_str="abc1Addfggg4556b";
    	int n=6;
    	solution(my_str, n);
    }
}

 

 

 

Comments