[프로그래머스] 크기가 작은 부분 문자열

gcoco·2023년 5월 11일
0

안녕하세요! 낙지 젓갈을 먹고 입맛이 돋은 GCOCO입니다!


잡설 한 COOKIE🍪

달리기를 시작했습니다!
최근 건강검진을 다녀왔는데요, 분명히 건강한 몸이라고 생각했음에도 불구하고 맘에 들지 않는 포인트들이 있었습니다..
그렇기에! 운동을 하고있지만 더 열심히 해야겠다 다짐이 들었답니다.

또한 전날인 5월 10일 수요일날 같은 수업을 듣는 친구가
"캬. 형 요즘 운동 열심히 하나봐요. 전완근이 많이 윤곽이 잡혔네요." 라고 말해준것이 어찌나 고맙고 설레던지!
더욱 더 운동에 정진하여 멋지고 건강한 GCOCO가 되도록 하겠습니다 ^^7

기분좋게, 본론으로 가시죠!


문제링크 :

참고로 이 문제도 옛날에 풀었던 문제입니다. 이전의 코드와 새로 짠 코드를 비교해보겠습니다!

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

#include <string>
#include <vector>

using namespace std;

int solution(string t, string p) {
    int answer = 0;
    for (int i = 0; i <= t.size() - p.size(); i++) {
        string s = t.substr(i, p.size());
        if (stoll(s) <= stoll(p))
            answer++;
    }
    return answer;
}

음 흐름은 다음과 같겠네요.

  1. string t를 p의 size만큼 잘라서 비교할 것이다.
  2. string을 long long type으로 비교한다.
  3. 조건에 해당하면, answer++

사실 stoll(s) <= stoll(p) 이 부분은 좋지 못하다고 할 수 있겠습니다. 만약 굉장히 긴 string이라면 long long으로 커버가 되지 않을 가능성이 농후합니다! 그리고 무엇보다... string은 비교연산을 지원합니다!

다음은 새로운 코드입니다.


#include <string>
#include <vector>

using namespace std;

int solution(string t, string p) {
    int answer = 0;
    int size = p.size();
    for(int i =0; i<=t.size()-size;i++){
        string tmp;
        tmp = t.substr(i,size);
        if(tmp<=p)
            answer++;
    }
    
    return answer;
}

네 별 다른것은 없습니다만, 짚어보자면 아까 말했듯이 string은 string 끼리의 비교 연산을 지원하기 때문에 위의 if문과 같이 사용할 수 있습니다.


작은 도움이 되었길 바라며, 포스팅을 마치겠습니다! 😁

profile
그코코 입니다.

0개의 댓글