https://school.programmers.co.kr/learn/courses/30/lessons/147355
문제 접근
문자열 t의 첫 글자부터 p의 크기만큼 부분 문자열을 만들어서 p의 크기와 비교한 뒤 작거나 같으면 그 횟수를 출력하는 문제다.
간단하게 p의 크기만큼 반복문을 돌려서 charAt()으로 t의 부분 문자열을 만들고 형변환으로 값을 비교하면 될 거라 생각했다.
근데 웬 걸 런타임 에러가 뜨더라
★ 문제의 조건을 다시보면 p의 길이가 1<= p <= 18로 정의 되어있다.
t의 부분 문자열과 p의 문자열을 받을 변수 t_Num과 p_Num을 처음에 int형으로 선언했었는데 int형은 길이가 10이라 에러가 뜬 것 이었다.
그래서 형 변환된 문자열들을 대입할 변수의 데이터 타입을 Long으로 다시 지정해주었다.
class Solution {
public int solution(String t, String p) {
int answer = 0;
char word;
Long t_Num = 0L;
Long p_Num = 0L;
for(int i=0; i<(t.length()-p.length())+1; i++ ) { // t의 길이-p의 길이 +1해야 횟수가 맞다
String sum = "";
for(int j=0; j<p.length(); j++){
word = t.charAt(i+j); // word에 t의 문자 저장 후 최종적으로 sum에 취합
// i+j로 t의 부분 문자열을 순서대로 만들도록 함
sum += word;
}
t_Num = Long.valueOf(sum);
p_Num = Long.valueOf(p);
if(t_Num <= p_Num) {
answer++;
}
}
return answer;
}
}
charAt()메서드로 일일이 문자를 저장하지 않고 substring() 메서드를 사용해서 한 번에 문자열을 자르는 방법도 있다.
class Solution {
public int solution(String t, String p) {
int answer = 0;
long t_Num = 0L;
long p_Num = 0L;
for(int i=0; i<(t.length()-p.length())+1; i++ ) {
String sum = "";
sum = t.substring(i, i+p.length()); // t.substring(0, 3) t의 0, 1, 2번째 문자만 잘라옴, 마지막 숫자의 -1까지라고 보면 된다.
t_Num = Long.valueOf(sum);
p_Num = Long.valueOf(p);
if(t_Num <= p_Num) {
answer++;
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 문자열 나누기 / JAVA ] (0) | 2023.01.12 |
---|---|
[프로그래머스 / 가장 가까운 같은 글자 / JAVA ] (0) | 2023.01.09 |
[프로그래머스 / 기사단원의 무기 / JAVA ] (1) | 2023.01.05 |
[프로그래머스 / 푸드 파이트 대회 / JAVA ] (1) | 2023.01.01 |
[프로그래머스 / 콜라문제 / JAVA ] (1) | 2022.12.30 |
댓글