알고리즘

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

Heidong 2023. 1. 24. 22:10
반응형

 

 

내 풀이

public class P_45 {
	
	public static int solution(String t, String p) {
        int answer = 0;
        
        int t_len = t.length();
        Long p_len = (long)p.length();
        
        
        /*
         * 공백 문자열을 찾기 위해서는 상위 문자열 - 하위 문자열 갯수를 빼고 1을 더해야 함.
         * 처음 시작 위치와 마지막 위치 때문에 1을 더해야 함.
         * i <= t_len - p_len 도 가능
         * p의 최대 자릿수는 18까지 가능 하지만 int형의 최대 자릿수는 -2147483648 ~ 2147483647로 10자리
         */
        for(int i=0; i<t_len - p_len + 1; i++) { 
        	if(Long.parseLong(t.substring(i, (int) (i+p_len))) <= Long.parseLong(p)) {
        		answer++;
        	}
        }
        
        return answer;
    }

	public static void main(String[] args) {
		// 크기가 작은 부분문자열
		String t = "1221351118575141528544";
		String p = "12511";
		int ans = solution(t, p);
		System.out.println(ans);
	}

}

 

문제 자체는 쉬움 문자열 자르기 함수로 해당 인덱스 만큼 빼가면서 계산하고 그 값이 p보다 작거나 같은지만 체크해서 카운팅 해주면 됨.

어려웠던 부분은 반복문의 횟수 조건 이였는데 t의 길이 - p의 길이를 하게 되면 안되고 +1을 해줘야 했던점

혹은 +1이 아니라 조건에 같음 조건을 넣어줘서 반복문을 한번 더 돌게 해야했던 점

이게 공백 문자열 크기를 구하는 방법이다.

 

그리고 p의 최대 자릿수는 18까지 가능 하지만 int형의 최대 자릿수는 10자리이기 때문에 Long 타입의 형변환이 필요하다.

 

반응형