[프로그래머스] 크기가 작은 부분 문자열 (C++)

이얀조·2023년 4월 17일
0

🎀프로그래머스

목록 보기
12/21
post-thumbnail

🏭 문제 설명


숫자로 이루어진 문자열 `t`와 `p`가 주어질 때, `t`에서 `p`와 길이가 같은 부분문자열 중에서, 
이 부분문자열이 나타내는 수가 `p`가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 `return`하는 함수 `solution`을 완성하세요.
예를 들어, `t`=`"3141592"`이고 `p`=`"271"` 인 경우, 
`t`의 길이가 `3`인 부분 문자열은 314, 141, 415, 159, 592입니다. 
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

⚛ 제한사항


  • 1 ≤ p의 길이 ≤ 18
  • p의 길이 ≤ t의 길이 ≤ 10,000
  • tp는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

🈂 풀이


같은 길이 의 부분 문자열 중에서 찾아야 한다는 조건덕분에 쉬운 문제였던 것 같다.

  1. t 에서 substr 을 진행하는데, 반복문은 t - p.length() 만큼만 수행한다.
  2. substr 을 통해 받아온 문자열을 stol 을 이용하여 변환한다.
  3. 값을 비교하여 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 를 벗어날 수 있는 길이이다. . . . 이 부분을 명심해야할 것 같다.

profile
이얀조다!

0개의 댓글