숫자로 이루어진 문자열 `t`와 `p`가 주어질 때, `t`에서 `p`와 길이가 같은 부분문자열 중에서,
이 부분문자열이 나타내는 수가 `p`가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 `return`하는 함수 `solution`을 완성하세요.
예를 들어, `t`=`"3141592"`이고 `p`=`"271"` 인 경우,
`t`의 길이가 `3`인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
p
의 길이 ≤ 18p
의 길이 ≤ t
의 길이 ≤ 10,000t
와 p
는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.같은 길이 의 부분 문자열 중에서 찾아야 한다는 조건덕분에 쉬운 문제였던 것 같다.
t
에서 substr 을 진행하는데, 반복문은t - p.length()
만큼만 수행한다.- substr 을 통해 받아온 문자열을 stol 을 이용하여 변환한다.
- 값을 비교하여
answer
의 값을 더한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string t, string p) {
int answer = 0;
int pLen = p.length();
for (int i = 0; i <= t.length() - pLen; i++) {
string tmp = t.substr(i, pLen);
long tmpInt = stol(tmp), pInt = stol(p);
if (tmpInt <= pInt) answer += 1;
}
return answer;
}
1. long 을 생각하지 못한 점
→ p
의 길이가 최대 18 인데, 이 부분은 Int 를 벗어날 수 있는 길이이다. . . . 이 부분을 명심해야할 것 같다.