본문 바로가기
Portpolio/codingtest

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

by Peter Choi 2023. 12. 18.
반응형

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

 

프로그래머스

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

programmers.co.kr

 

보통 여기서 바로 아래의 코드에 Integer.parseInt()를 쓰는 사람들이 많다. 나도 그렇게 했는데 테스트 코드 3개로 실행시켜 봤을 때는 아무 문제 없다가 제출하려고 하면 갑자기 런타임 에러가 뜨는 테스트 케이스들이 너무 많아진다. 그래서 찾아보니 Integer.parseInt()를 Long.ParseLong()으로 바꾸니까 해결이 됐다!

 

여기서 문제를 푸는 포인트는

1. Long과 Integer의 차이점

2. substring(), parseLong()이라는 메소드의 사용 방법

종류
설명
저장 공간
값의 범위(최소값~최대값)
int
부호 있는 정수
32 bits
-2,147,483,648 ~ 2,147,483,647
long
부호 있는 정수
64 bits
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

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 (Long.parseLong(substring) <= Long.parseLong(p)) {
                answer++;
            }
        }
        return answer;
    }
}

 

여기서 완성형으로 코드를 작성하면 다음과 같이 작성할 수 있다.

class Solution {
    public static 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 (Integer.parseInt(substring) <= Integer.parseInt(p)) {
                answer++;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        System.out.println(solution("3141592", "271")); // 예상 결과: 2
        System.out.println(solution("500220839878", "7")); // 예상 결과: 8
        System.out.println(solution("10203", "15")); // 예상 결과: 3
    }
}

 

테스트 케이스는 얼마든지 본인이 만들어서 추가할 수 있다. 나는 프로그래머스 문제에서 준 3개의 테스트 케이스만 가지고 실행해 봤는데 추가적으로 더 할 사람은 더 추가해서 실행해 보면 좋을 것 같다.

반응형

댓글