-
[자바(JAVA)] 크기가 작은 부분문자열- 런타임오류프로그래머스/자바(JAVA) 2023. 8. 21. 10:03728x90
https://school.programmers.co.kr/learn/courses/30/lessons/147355
내 코드
class Solution { public int solution(String t, String p) { int answer = 0; int pInt = Integer.parseInt(p); int pLen = p.length(); for (int i = 0; i <= t.length() - pLen; i++) { String subStr = t.substring(i, i + pLen); int tInt = Integer.parseInt(subStr); if (tInt <= pInt) { answer++; } } return answer; } }
1. 각 자리별로 주어진 p의 자리만큼 끊어서 만든 숫자를 p와 비교해서 같거나 작으면 count++
2. 숫자 크기값 비교를 위해 int형으로 변환함
3. for문은 p의 길이만큼은 안돌아도 되기 때문에 범위설정
결과는 런타임에러!!
미리 계산이 가능한건 변수로 설정했다고 생각하는데 어떤걸 더 줄일 수 있을까 고민해봤다.
리팩터링
class Solution { public int solution(String t, String p) { int answer = 0; Long pNum = Long.parseLong(p); int len = t.length() - p.length(); int pLen = p.length(); for (int i = 0; i <= len; i++) { String subStr = t.substring(i, i + pLen); Long tNum = Long.parseLong(subStr); if (tNum <= pNum) { answer++; } } return answer; } }
미리 계산이 가능한건 빼뒀다.
그리고 제한사항에서 까먹은 문자의 길이를 살펴봤다.
문자의 길이 = 숫자의 자릿수
즉, int형의 범위를 넘어가기 때문에 Long으로 설정하여 문제를 풀었다.
728x90'프로그래머스 > 자바(JAVA)' 카테고리의 다른 글
[자바(JAVA)] 두 개 뽑아서 더하기 / HashSet, TreeSet (0) 2023.08.28 [자바(JAVA)] 문자열로 변환/ valueOf()와 perse()의 공통점과 차이점 (0) 2023.08.21 [자바(JAVA)] 정수 내림차순으로 배치하기. PriorityQueue<Long> (0) 2023.08.18 [자바(JAVA)] 문자열 뒤집기, StringBuilder, setCharAt(index, newChar) (0) 2023.08.16 [자바(JAVA)] 수열과 구간 쿼리 3 / ArrayList<>(), Collections.swap() (0) 2023.08.15