class Solution {
public int solution(String t, String p) {
int answer = 0;
if(p.length() >= 1 && p.length() <= 18){
long[] num = {};
long num2 = Long.parseLong(p);
for(int i = 0; i < t.length(); i++){
if(i + p.length() == t.length() + 1){
break;
}
num = new long[i + 1];
}
for(int i = 0; i < t.length(); i++){
if(i + p.length() == t.length() + 1){
break;
}
num[i] = Long.parseLong(t.substring(i, i + p.length()));
}
for(int i = 0; i < num.length; i++){
if(num2 >= num[i]){
answer = answer + 1;
}
}
}
return answer;
}
}
또 다시 답이 나왔어도 찜찜한 문제였다. 배열을 무조건 사용해야 하는가이다.
배열을 사용한다면 이러한 문제에서는 배열의 크기가 동적으로 변해야 하는데 없어도 되는 코드가 생김으로 코드가 복잡해지는 결과를 초래할 수 있다.
class Solution {
public int solution(String t, String p) {
int pLength = p.length();
long pValue = Long.parseLong(p);
int answer = 0;
for (int i = 0; i <= t.length() - pLength; i++) {
long tValue = Long.parseLong(t.substring(i, i + pLength));
if (tValue <= pValue)
answer++;
}
return answer;
}
}
하지만 도저히 생각해도 배열없이 풀 방법이 생각나지 않았다.
이 코드는 불필요한 객체를 줄이고 문자열에서 숫자를 직접 파싱하여 실행 시간에 더욱 효율적인 코드라고 생각이 들었다.
출처: 프로그래머스 코딩 테스트 연습 https://programmers.co.kr/learn/challenges
'코딩테스트 > 프로그래머스 Lv1' 카테고리의 다른 글
행렬의 덧셈 (1) | 2024.04.03 |
---|---|
문자열 내림차순으로 배치하기 (2) | 2024.04.03 |
수박수박수박수박수 ~~~ (0) | 2024.04.03 |
나누어 떨어지는 숫자 배열 (0) | 2024.04.03 |
두 정수 사이의 합 (2) | 2024.04.03 |