본문 바로가기
TIL

99클럽 코테 스터디 2일차 TIL + 크기가 작은 부분 문자열

by leek94 2024. 10. 29.


- 오늘의 학습 키워드 : Long , parseInt. count
- 공부한 내용 본인의 언어로 정리하기

-> 

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

문자열에서 부분문자열을 추출하여 숫자 비교를 수행하는 문제입니다.

문제 분석

핵심 요구사항

  • 문자열 t에서 p와 같은 길이의 부분문자열을 모두 추출
  • 각 부분문자열을 숫자로 변환하여 p와 비교
  • p보다 작거나 같은 숫자의 개수를 반환

제한사항

  • p의 길이: 1 ~ 18
  • t의 길이: p의 길이 이상, 10,000 이하
  • t와 p는 0으로 시작하지 않는 숫자로만 구성

구현 포인트

1. 자료형 선택

// 18자리 숫자까지 처리해야 하므로 Long 사용 필수 long number = Long.parseLong("123456789123456789");

2. 부분문자열 추출

// substring(시작인덱스, 끝인덱스)를 사용 String part = t.substring(i, i + p.length());

3. 문자열 순회

// 부분문자열의 시작점은 0부터 (t의 길이 - p의 길이)까지 for(int i = 0; i <= t.length() - p.length(); i++)

 

class Solution {
    public int solution(String t, String p) {
        int pLen = p.length();
        int tLen = t.length();
        long pNum = Long.parseLong(p);
        int count = 0;
        
        for(int i = 0; i < tLen - pLen + 1; i++){
           if(Long.parseLong(t.substring(i, i+pLen)) <= pNum) {
               count++;
           }
        }
       
        return count;
    }
}

예시 설명

입력값: t="3141592", p="271"

  1. 추출되는 부분문자열:
    • "314" > 271
    • "141" < 271 (count++)
    • "415" > 271
    • "159" < 271 (count++)
    • "592" > 271
  2. 결과: 2

주의사항

  1. int 대신 long 사용 이유
    • 최대 18자리 숫자 처리 필요
    • int는 약 21억(10자리)까지만 처리 가능
    • long은 약 922경(19자리)까지 처리 가능
  2. 문자열 처리 시 주의점
    • substring의 두 번째 파라미터는 끝 인덱스
    • 인덱스 범위 계산에 주의
  3. 비교 연산
    • 숫자 비교 시 자동으로 큰 타입으로 형변환
    • 문자열을 숫자로 변환 후 비교


- 오늘의 회고
문제에서 int로 풀 수있을 거라고 생각해서 시도를 했는데 계속 런타임 에러가 났다.

String으로 18자리이다 보니깐 int의 최대 10자리인 21억 부터 - 21억까지만 가능하다는 걸 간과했다.

그래서 long으로 변경해서 문제를 해결함