Jam's story

[프로그래머스] 크기가 작은 부분문자열 java 본문

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

[프로그래머스] 크기가 작은 부분문자열 java

애플쩀 2022. 12. 24. 18:51
class Solution {
	//t를 p의 갯수로 자른 후, p보다 작거나 같은 수는 몇갠지 
	public static   int[] splitarr;
	public static   int len;
	public static   int arrlen;
	public static int solution(String t, String p) {
	        int answer = 0;
	        if((p.length()>=1 || p.length()<=18 ) && t.length()<=10000) { 
	        len=p.length();
	        arrlen= t.length()-len+1;
	        splitarr=new int[arrlen];
	        int endIdx=len;
	        for (int i = 0; i < splitarr.length; i++) {
	        	
				splitarr[i]=Integer.parseInt(t.substring(i,endIdx));
				endIdx++;
				//System.out.println(splitarr[i]);
				if(splitarr[i]<=Integer.parseInt(p)) answer++;
			}	        
	        }
	  //      System.out.println("답은: "+answer);
	        return answer;
	    }
}

 

 

이렇게 풀었더니 테스트케이스는 통과해도 제출에서 런타임에러 발생

 

 

int 형으로 풀면 에러가 난다고 한다.

이유가 뭐지 ?

 

 

long으로 바꿨더니 제출 통과 

	public static   long[] splitarr;
	public static   int len;
	public static   int arrlen;
	public static int solution(String t, String p) {
	        int answer = 0;
	        if((p.length()>=1 || p.length()<=18 ) && t.length()<=10000) { 
	        len=p.length();
	        arrlen= t.length()-len+1;
	        splitarr=new long[arrlen];
	        int endIdx=len;
	        for (int i = 0; i < splitarr.length; i++) {
	        	
				splitarr[i]=Long.parseLong(t.substring(i,endIdx));
				endIdx++;
				//System.out.println(splitarr[i]);
				if(splitarr[i]<=Long.parseLong(p)) answer++;
			}	        
	        }
	  //      System.out.println("답은: "+answer);
	        return answer;
	    }

 

 

다른 사람 풀이를 보니까 엄청 간단하게 풀었다

 

나처럼 변수선언없이 바로 for문에서 함수사용으로 길이 알아내기 

 

class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        for (int i = 0; i < t.length()-p.length()+1; i++){
            if (Long.parseLong(t.substring(i,i+p.length())) <= Long.parseLong(p)){
                answer++;
            }
        }
        return answer;
    }
}

 

Comments