알고리즘/프로그래머스 1단계
프로그래머스 - 크기가 작은 부분 문자열 - C++
게임만드는학생
2023. 10. 22. 14:48
https://school.programmers.co.kr/learn/courses/30/lessons/147355#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
int solution(string t, string p) {
long long answer = 0;
long long pi = stoll(p);
for(int i=0;i<t.length()-p.length()+1;i++)
{
string c = t.substr(i,p.length());
if(stoll(c)<=pi)
answer++;
}
return answer;
}
설명
이 문제는 문자열을 정수로 바꾼 후 비교하는 것과 문자열에서 부분문자열을 추출하는 방법만 알면 아주 간단히 풀 수 있다.
t 문자열에서 p문자열의 길이와 동일하게 추출할 수 있는 부분문자열중 p문자열보다 작은 문자열이 몇개인지를 반환하는 문제이다.
for문으로 t의길이 - p의 길이 + 1 까지 돌아준다. 이유는 p의 길이가 3, t의 길이가 6인데
t의 5번째에서 길이 3의 문자열을 추출할 수는 없기 때문이다.
i부터 p의 길이만큼의 부분문자열을 t에서 추출하고 둘의크기를 비교한다.
여기서 주의할 점은 p의 길이는 최대 18까지인 것이다.
int의 범위는 약 21억인데, 이는 11자리를 넘기지 못한다. 따라서 int로 하면 몇가지 케이스에서 오류가 날 것이다.
따라서 long long 형으로 정수를 저장해야 한다.