관리 메뉴

기억을 위한 기록들

[프로그래머스 lv 1 ] - 크기가 작은 부분문자열 (C++) 본문

Coding Test - cpp/String

[프로그래머스 lv 1 ] - 크기가 작은 부분문자열 (C++)

에드윈H 2023. 11. 16. 14:35

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

-  처음에 coredump 가 발생하였으나 p의 범위가 문제였다.

- stoi에서 stoll로 변경후 해결 -> p의 값 범위가 18'글자'라는 말에 헷갈렸으나 '숫자'의 길이로 int의 범위로 는 -2,147,483,647  ~ 2,147,483,647 최대 10글자이고, long long의 범위가 19글자이다. -2의 63승으로 (-9,223,372,036,854,775,808) 에서 263 - 1(9,223,372,036,854,775,807)

 

 

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

using namespace std;

int solution(string t, string p) {
    int answer = 0;    
    const int pSize = p.size();
    const long long  pValue = stoll(p); 
    
    
    for(int index = 0;index<t.size();index++)
    {
    	//pSize 만큼 문자 자르기
        const string cutStr = t.substr(index, pSize);
        
        //검사 조건 초과되면 break;
        if(cutStr.size() < pSize || t.size()<=index)
        {
            break;
        }        
        
        // 문자열을 long long 타입으로 변환
        const long long cutNum = std::stoll(cutStr);  
        
        //허용 범위인지
        if(cutNum<=pValue)
        {
            answer++;     
        }
    }

    return answer;
}