- 오늘의 학습 키워드 : 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"
- 추출되는 부분문자열:
- "314" > 271
- "141" < 271 (count++)
- "415" > 271
- "159" < 271 (count++)
- "592" > 271
- 결과: 2
주의사항
- int 대신 long 사용 이유
- 최대 18자리 숫자 처리 필요
- int는 약 21억(10자리)까지만 처리 가능
- long은 약 922경(19자리)까지 처리 가능
- 문자열 처리 시 주의점
- substring의 두 번째 파라미터는 끝 인덱스
- 인덱스 범위 계산에 주의
- 비교 연산
- 숫자 비교 시 자동으로 큰 타입으로 형변환
- 문자열을 숫자로 변환 후 비교
- 오늘의 회고
문제에서 int로 풀 수있을 거라고 생각해서 시도를 했는데 계속 런타임 에러가 났다.
String으로 18자리이다 보니깐 int의 최대 10자리인 21억 부터 - 21억까지만 가능하다는 걸 간과했다.
그래서 long으로 변경해서 문제를 해결함
'TIL' 카테고리의 다른 글
99클럽 코테 스터디 10일차 TIL + 폰켓몬 (0) | 2024.11.07 |
---|---|
99클럽 코테 스터디 7일차 TIL + 전주 듣고 문제 맞히기 (6) | 2024.11.03 |
99클럽 코테 스터디 1일차 TIL + 문자열 내 p와 y의 개수 (0) | 2024.10.29 |
22.12.30 TIL (0) | 2022.12.30 |
22.12.29 TIL (0) | 2022.12.29 |