본문 바로가기
Programming Solve/프로그래머스

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

by msm1029 2022. 12. 25.
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/147355

 

프로그래머스

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

programmers.co.kr

 

 

풀이

문자열의 길이가 10000이므로 정수로 변환해서 비교하는 것은 불가능하다.

따라서, p의 크기만큼  t를 잘라서 직접 비교한다.

 

우선 pt를 p의 크기만큼 자른 것이 일치하는지 확인하고 같다면 answer을 증가 시켜준 뒤 다음 인덱스로 넘어간다.

같지 않다면 한 자리씩 비교해나가며 p[j]보다 t[i + j]가 크다면 더 볼 필요 없이 t가 큰 값이므로 break 해주고

p[j]가 t[i + j]보다 작으면 더 볼 필요 없이 p가 작은 값이므로 answer을 증가 시켜준 뒤 break 해준다.

 

코드

#include <bits/stdc++.h>
using namespace std;

int solution(string t, string p) {
    int answer = 0;
    
    for(int i=0; i<=t.size() - p.size(); i++){
        if(p == t.substr(i, p.size())){
            answer++;
            continue;
        }
        
        for(int j=0; j<p.size(); j++){
            if(t[i + j] > p[j]) break;
            if(t[i + j] < p[j]){
                answer++;
                break;
            }
        }
    }
    
    return answer;
}
반응형