https://school.programmers.co.kr/learn/courses/30/lessons/147355#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서,
이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return 하는 함수를 만드세요.
ex) t="3141592" p="271"
t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592
이때 271보다 작거나 같은 수는 141, 159 2개
제한사항
- 1 ≤ p의 길이 ≤ 18
- p의 길이 ≤ t의 길이 ≤ 10,000
- t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
풀이 방법
for문을 0부터 t의 길이 - p의 길이까지 순회하며 substr로 문자열을 잘라 비교하면 되는 문제입니다.
다만, 주의하셔야 할 점은 숫자가 10,000까지가 아니라 문자열의 길이가 10,000이므로 int 범위의 최댓값인 21억을 훨씬 초과할 수 있다는 점입니다.
예를 들어, 길이가 18인 문자열만 되어도 100000000000000000과 같이 100경에 해당하는 값이 나오게 되므로, 시간초과가 발생할 가능성이 매우 높습니다.
따라서 문자열을 숫자로 변환할 때는 범위를 반드시 확인해야 하며, 문자열의 길이가 10자리를 넘어가는 경우 반드시 long long 타입을 사용하는 것을 잊지 마세요!
풀이 코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string t, string p) {
int answer = 0;
long long num = stoll(p);
int size = p.size();
for(int i=0; i<t.size()-size+1; i++){
if(stoll(t.substr(i,size)) <= num) answer++;
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.0 유한소수 판별하기 c++ (0) | 2025.01.09 |
---|---|
[프로그래머스] Lv.3 금과 은 운반하기 c++ (0) | 2025.01.08 |
[프로그래머스] Lv.1 다트 게임 c++ (0) | 2025.01.07 |
[프로그래머스] Lv.1 가장 가까운 같은 글자 c++ (10) | 2025.01.06 |
[프로그래머스] Lv.0 문자열 계산하기 c++ (2) | 2025.01.06 |