프로그래머스 | LV.2 크기가 작은 부분 문자열 (Java)

728x90

프로그래머스 | LV.2 크기가 작은 부분 문자열

문제 풀이

  • for의 끝나는 조건을 문자열 t의 길이에서 p의 길이를 빼고 이를 i와 비교를 한다.
  • 이때 String.length()는 문자열의 길이를 가져오기 때문에 주의해야한다. ("abcde"일 경우 String.length()는 5이다.)
  • 이외에 주의해야 할것으로는 데이터 타입을 Long으로 잡아야 한다는 점이다. int로 할 경우 데이터의 범위가 (signed 기준) 2,147,483,647까지 나타낼수있고 이는 문제에서 요구하는 p의 길이의 최대값을 담지 못한다. 그렇기에 Long을 사용하거나 LongLong을 사용 해야한다.

코드 (1차 시도) - 런타임 오류

import java.util.*;

class Solution {
    public int solution(String t, String p) {
        int answer = 0;

        //길이 초과안되게 밀면서 갈 예정 
        for(int i=0; i<=t.length()-p.length(); i++){
            String tmp = "";
            for(int j =i; j<i+p.length(); j++){
                tmp += t.charAt(j);
            }
            if(Integer.parseInt(tmp) <= Integer.parseInt(p)){
                answer++;
            }
        }

        return answer;
    }
}

성공한 코드

class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        Long numberOfP = Long.valueOf(p);

        for(int i=0; i<= t.length()-p.length(); i++){
            String temp = t.substring(i, i+p.length());
            Long numberOfTemp = Long.valueOf(temp);
            if(numberOfTemp <= numberOfP)
                answer++;
        }

        return answer;
    }
}
728x90