Programmers/Level 1

C++ / 프로그래머스 / 크기가 작은 부분 문자열

GitHubSeob 2023. 6. 20. 00:21

문제

https://school.programmers.co.kr/learn/courses/30/lessons/147355

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제풀이

먼저 string s에 p의 크기만큼 t[idx]를 입력받고 num 벡터에 저장한다.

idx를 1로 두고 idx + p.size() -1 가 t크기 보다 작을 때까지 탐색한다. (idx + p.size() -1 은 s의 끝자리 위치를 의미한다)

s의 첫 글자를 지우고, 새 글자를 하나 더하고 num 벡터에 저장한다.

 

탐색이 끝났으면 num 벡터를 탐색하면서 p이하인 수가 있을 때마다 answer에 1을 더한다.

탐색이 종료되면 답을 출력한다.

 

코드

#include <string>
#include <vector>
using namespace std;

int solution(string t, string p) {
    int answer(0), idx(0);
    vector<string>num;
    string s("");
    
    for (idx = 0; idx < p.size(); ++idx) {
        s += t[idx];
    }
    num.push_back(s);
    
    for (idx = 1; idx + p.size() - 1 < t.size(); ++idx) {
        s.erase(s.begin());
        s += t[idx + p.size() - 1];
        num.push_back(s);
    }
    
    for (idx = 0; idx < num.size(); ++idx) {
        if (num[idx] <= p)
            answer++;
    }

    return answer;
}