Coding Test

CT | 문자열을 Integer로 형변환 시 NumberFormatException 방지하여 문제풀기 - (프로그래머스)크기가 작은 부분문자열

이진유진 2024. 2. 28. 17:51
반응형

 

Java에서의 자료구조와 알고리즘을 공부하고자 간단한 문제를 풀어봤습니다.

문제 설명

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서,
이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

제한사항
1 ≤ p의 길이 ≤ 18
p의 길이 ≤ t의 길이 ≤ 10,000
t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

 

이 문제를 처음 풀 때, 제한사항을 간과하고,

String -> Integer로 형변환하는 
Integer.parseInt()를 사용하여 문제를 풀었더니 런타임 에러가 떴습니다. 

 

코드에서 주어진 범위 내의 길이를 가진 값이 아닌 경우, 

NumberFormatException이 발생하기 때문에 

 

compareTo() 함수를 사용하여 문제를 풀었습니다. 

 


compareTo 메서드는 Comparable 인터페이스를 구현한 객체들 간의 비교를 수행하는 메서드입니다. 

주로 정렬이 필요한 자료구조에서 사용되며, 
객체 간의 순서를 결정할 수 있습니다. 

일반적인 메서드 시그니처
int compareTo(T other)

T -> 비교 대상이 되는 객체의 타입을 나타냅니다. 

반환값은 비교 결과를 나타내며 다음 규칙을 따릅니다. 

this 객체가 other 객체보다 작으면 음수 반환
this 객체가 other 객체와 같으면 '0' 반환
this 객체가 other 객체보다 크면 양수 반환 
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        
        for ( int i = 0; i <= t.length() - p.length(); i++ ) {
            String subString = t.substring(i, i + p.length());
            
            if (subString.compareTo(p) <= 0) {
                answer++;
            }
        }        
        return answer;
    }
}

 

compareTo() 함수에는 "문자열의 비교" 와 "숫자의 비교" 두 방식이 존재합니다. 

숫자의 비교 같은 경우는 단순히 크다(1), 같다(0), 작다(-1) 의 관한 결과값을 리턴해주는 반면,  
문자열의 비교 같은 경우는 같다(0), 그 외 양수/음수 값을 반환해줍니다. 

 

위의 코드는 문자열의 비교로, 작거나 같을 때 answer++ 형태의 코드로 마무리 했습니다. 

 

 

 

더 좋은 코드나 해결책이 있다면, 댓글로 공유 부탁드려요!

반응형