프로그래머스

99클럽 코테 스터디 3일차 TIL 크기가 작은 부분 문자열(int, long의 범위)

리콜 2024. 3. 31. 23:43

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

t를 p의 길이만큼 잘게 나누어야하기에 substring으로 나누어야 겠다고 생각하였고

전날에 풀었던 문제와 같이 pareInt가 생각 나게 되는 문제였다.

 

따라서 처음으로 작성하였던 코드는

 

첫번째 코드

public int solution(String t, String p) {
        int pInt = Integer.parseInt(p);
        int answer = 0;
        
        for(int i =0;i<=t.length() - p.length();i++){
            int k = Integer.parseInt(t.substring(i, i + p.length()));
            if((k <= pInt)){
                answer++;
            }
        }
 
        return answer;
    }

 

 

와 같았다 하지만

 

 

와 같이 나오게 되었다 

p를 int화 하는 과정도 for문에서 돌릴려다가 런타임 오류를 걱정하여 밖으로 뺏는데 런타임 오류가 떠 당황하였다.;

 

이에 문제를 다시 함참 들여다 보게 되었는데 

 

 

가 들어왔다.

 

t의 길이가 10000 이라고 하는데 나는 길이를 읽고도 숫자의 범위가 int범위 안인데?(5자리 밖에 안된다고 생각;;)

라고 생각하며 왜 안되는거지 하고 있다가 깨닫고 수정하였다.

 

따라서 완성된 코드는 

public static int solution(String t, String p) {
        long pLong = Long.parseLong(p);
        int answer = 0;

        //10203 15
        //5 - 2 = 3
        for(int i =0;i <= t.length() - p.length();i++){
            long k = Long.parseLong(t.substring(i, i + p.length()));
            System.out.println(k);
            if((k <= pLong)){

                answer++;
            }
        }

        return answer;
    }

 

 

오류를 해결하면서 int형과 long형의 범위를 공부하게 되었다. 

 

int 4바이트 -2,147,483,648 ~ 2,147,483,647
long 8바이트 -9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807

 

자료형의 범위를 기억하자!

반응형