인프런 커뮤니티 질문&답변

jhyunkuk님의 프로필 이미지
jhyunkuk

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-G

9996문제 질문있습니다.

작성

·

92

0

앞부분과 뒷부분을 비교해서 DA로 출력하는 조건문에서 조건의 뒷부분을 비교하는 조건에 대해서 이해가 되지 않습니다.string f; (ab * ab 중 앞 ab)string e; (ab * ab 중 뒤 ab) 문제로 제시된 문자열의 사이즈에서 뒷부분의 사이즈를 빼면 조건의 뒷 문자에 대한 조건이 완성되는 이유가 궁금합니다. if(f == s.substr(0,f.size()) && e == s.substr(s.size() - e.size()))

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

substr함수부분을 보시면 다음과 같이 되어있는데요.

여기서 크기 부분을 제외하고 위치만 넣게 되면 해당 위치부터 마지막까지 추출하게 됩니다.

substr(위치, 크기)

특정 위치에서 크기만큼의 문자열을 추출합니다. O(n)의 시간복잡도를 가집니다.

즉,

e == s.substr(s.size() - e.size()))

이부분 자체가 s.size() : s의 크기 - e.size() 부분 부터 ~ 시작해서 끝자리까지 뽑아내는 것이기 때문에

끝자리 substring 부분을 뽑아낼 수 있게 되는 것입니다.

 

그림으로 그려보면 다음과 같습니다.

image



참고코드

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

int main() {
    string a = "abc";
    string b = a.substr(1);
    cout << b << "\n"; //bc
}

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

jhyunkuk님의 프로필 이미지
jhyunkuk

작성한 질문수

질문하기