t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
테스트 (인텔리제이)
p의 크기를 담은 length와 p를 Long 타입으로 바꾼 num 변수를 선언해줍니다.
이제 for문을 사용하여 i는 0부터 t의 크기에서 p의 크기를 뺸 값에 1을 더합니다. 그래야 substring으로 문자를 자를때 마지막까지 자를 수 있습니다.
이후 for문 안에 p의 크기만큼 잘라진 t의 값을 long 타입의 변수에 담습니다.
그리고 if문을 이용하여 t의 잘라진 값과 p를 비교하여 p보다 작거나 같은 값이 나오면 answer를 1씩 증가하게 했습니다.
import com.sun.jdi.IntegerType;
public class Main {
public static void main(String[] args) {
/*
문자열 t와 p가 매개변수로 주어집니다.
t와 p는 숫자로 이루어진 문자열입니다.
t에서 p와 길이가 같은 부분 문자열 중에서
p보다 작은 같거나 작은 수의 개수를 출력하는 문제입니다.
t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
t p result
"3141592" "271" 2
"500220839878" "7" 8
"10203" "15" 3
*/
String t = "500220839878";
String p = "7";
int length = p.length();
long num = Long.parseLong(p);
int answer = 0;
for (int i = 0; i < t.length() - length + 1; i++) {
long diff = Long.parseLong(t.substring(i, i + length));
if (diff <= num) {
answer++;
}
}
System.out.println(answer);
}
}
프로그래머스 코드
class Solution {
public int solution(String t, String p) {
int len = p.length();
long num = Long.parseLong(p);
int answer = 0;
for (int i = 0; i < t.length() - len + 1; i++) {
long diff = Long.parseLong(t.substring(i, i + len));
if (diff <= num) answer++;
}
return answer;
}
}