Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 크기가 작은 부분 문자열 (자바/Java) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 크기가 작은 부분 문자열 (자바/Java)

luke-king 2024. 5. 20. 17:51

 

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/147355

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

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;
    }
}

 

오늘 문제는 "크기가 작은 부분 문자열" 문제다.

두 번 시도 끝에 푼 문제... 두 번 전부다 런타임 에러가 났는데 그 이유에 대해 먼저 설명해보려 한다.

1. Integer로 형변환 할경우 런타임 에러가 난다. p의 길이가 18이 넘어가므로 Integer범위를 넘었던 것이다...

그것도 모르고 조건식에서도 문제가 발생했나 싶어 조건식도 바꿨는데 런타임 에러가 나서 더 고민했었다.. 

마침 바로 생각이나 다시 시도하니 문제없이 해결했다.

그럼 풀이 설명을 해보겠다.

 

1. substring() 함수를 사용해 문자열들을 규칙에 맞춰 잘라준다.

 

2. substring() 함수를 통해 자른 문자열들을 compareTo() 함수로 문자열 비교를 한다.

(문자열 자르는것 까지는 문제없을 거라 생각하지만 조건식이 중요하다 생각한다.)

 

3. 조건에 충족한다면 answer++ 증가하고 문제는 끝이다.

 

 

 

여기서 substring.compareTo(p) <= 0 조건이 어떻게 작동하는지 보겠다.

 

예제 입력 t = "10203"p = "15"을 가지고 실행한다면

  1. 첫 번째 비교: "10" vs "15"
    • '1' == '1' (유니코드 49)
    • '0' < '5' (유니코드 48 < 53)
    • 따라서 "10" < "15"이고, cnt가 1 증가한다.

나머지 또한 같은 규칙으로 비교한다.