쌓고 쌓다

[프로그래머스] 크기가 작은 부분 문자열 C++ 풀이 및 해설 본문

알고리즘/프로그래머스

[프로그래머스] 크기가 작은 부분 문자열 C++ 풀이 및 해설

승민아 2023. 9. 23. 19:41

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

 

프로그래머스

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

programmers.co.kr

 

풀이 방법

  1. t의 문자열을 하나하나 반복문으로 돌며 p와 비교할 부분 문자열을 만든다.
  2. 현재 만들어진 부분 문자열의 길이가 p보다 작다면
    1. 부분 문자열에 t의 i번째 문자열을 붙인다.
  3. 현재 만들어진 부분 문자열의 길이가 p와 동일하다면
    1. 부분 문자열이 p보다 작거나 같은지 확인하여, 만족한다면 answer++ 해준다.
    2. 그리고 현재 반복문의 i를 가지고 t의 i번째 문자를 부분 문자열에 붙인다.
    3. 부분 문자열의 맨 앞 문자는 지운다.
  4. 반복문을 다 돌았다면 마지막으로 부분 문자열을 가지고 크기 비교를하여 answer++ 할지말지 결정하자.
    1. 왜냐. 반복문을 다 돌았을때 마지막 문자를 추가하고 반복문을 탈출한 상태이기때문에 마지막 검증이 필요함.

 

전체 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(string t, string p) {
    int answer = 0;

    string str = "";
    for(int i=0; i<t.length(); i++) {
        if(str.length()<p.length()) { // p의 길이에 못미치면
            str+=t[i]; // i번째 수 붙이기
        } else if (str.length()==p.length()) { // p의 길이가 되었다면
            if(stoll(str)<=stoll(p)) { // p보다 작거나 같다면
                answer++;
            }
            str+=t[i]; // i번째 수를 붙이고
            str.erase(str.begin()); // 첫번째 수를 제거하고
        }
    }
    
    if(stoll(str)<=stoll(p)) { // 위의 반복문에서 t의 마지막 문자열을 붙이고 검증 안하고 탈출하므로. 마지막 검증 필요
        answer++;
    }
    
    
    return answer;
}
Comments