문제를 통해 새롭게 배운 부분 OR 느낀점
💡 알 수 없는
런타임 에러
가 발생하면자료형
을 확인하자!
분명 테스트 케이스는 모두 통과했는데 막상 코드를 제출하니 런타임 에러가 발생했다. 이상하다 싶어서 문제를 다시 읽어보니 놓친 부분이 있었다.
• 1 ≤ p의 길이 ≤ 18
• p의 길이 ≤ t의 길이 ≤ 10,000
위의 조건을 제대로 안보고 단순히p
≤t
로 이해하고 넘어가서tn
과pn
을int
타입으로 지정해서 벌어진 문제였다😱
앞으로는 마음이 급하다고 대충 보고 지나가는 것이 아니라, 출제자가 왜 저런 조건을 걸었는지 생각하는 습관을 길러야겠다.
t
와 p
가 나타내는 수 tn
, pn
을 선언한다.t
의 길이가 최대 10,000 이기 때문에 long
타입으로 선언한다.for
문을 사용해 p
의 제일 앞자리 숫자와 t
의 해당 인덱스에 해당하는 숫자를 비교한다.i <= t.length() - p.length()
→ p
보다 작은 자리수는 비교할 필요가 없기 때문에 생략한다.t
의 해당 인덱스에 해당하는 숫자가 같거나 작다면 tn
을 현재 인덱스부터 p
의 길이만큼 자른다.tn
이 pn
보다 작거나 같다면 answer++
해준다.class Solution {
public int solution(String t, String p) {
int answer = 0;
long tn = 0;
long pn = Long.parseLong(p);
for(int i = 0; i <= t.length() - p.length(); i++) {
if(t.charAt(i) <= p.charAt(0)) {
tn = Long.parseLong(t.substring(i, i + p.length()));
if(tn <= pn) answer++;
}
}
return answer;
}
}