boj 11478번 문제를 통해 접하게 된 substr() 함수와 그 함수의 활용에 관하여.

일단 어떤 방식으로 해야할지 생각을 해보다가 참고 코드를 보았는데 substr() 함수를 사용하는 것을 보았다. 

처음에는 substr() 함수가 인자로 두개를 받아서 두 배열의 인덱스 사이를 출력해주는 것인줄 알고 그렇게 사용을 해보았는데, 

원하는 값 형태가 나오지 않아서 substr() 함수에 대해서 검색해보았다.

이와 같은 결과를 얻을 수 있었다. 

substr() 함수의 경우는 인자를 두개 받는 경우는 첫번째 인자는 시작 위치, 두번째 인자는 추출할 문자의 개수를 나타낸다고 한다. 

이때에 두번째 인자가 개수를 나타냈기 때문에 내가 생각했던 것과는 다르게 동작했던 것이다. 이번 경험을 통해서 만약 stl 함수를 사용하는 경우라면, 그 stl 함수에 대해서 확실하게 알고 사용해야 겠다는 생각이 들었다. 

 

일단 이런식으로 substr()이 시작 위치, 그리고 개수 를 받기 때문에,  그 점을 생각해보면

왜 코드도 

  cin >> s;
  for (int st = 0; st < s.length(); st++)
    for (int len = 1; st + len <= s.length(); len++)
      uset.insert(s.substr(st, len));
  cout << uset.size();

형태로 첫번째 반복문 내부에 존재하는 두번째 반복문이 for(int len=1; st+len<=s.length(); len++)

형태로 나오는지 알 수 있었다. 

지속적으로 st의 값이 증가되어 가면서, 두번째 인자로 두는 len 값이 계속 일정한게 아니라 시작되는 위치가 증가할수록 len 값도 줄어들면서 문자열의 끝을 벗어나지 않게 되어야 하기 때문에, 시작 위치와 len의 값의 합이 s.length()를 넘지 않는 선에서 머물러야 하기 때문에 

st를 증가시킬수록 len이 하나씩 줄어는 형태로 짜기 위해서 저렇게 코드를 작성했던 것이다. 

 

이번 문제를 통해서 string의 부분 문자열을 만들어 낼때 substr() 함수를 사용 하는 것에 대해서 배울 수 있었고, 함수의 인자들에 대해서도 배울 수 있었는데, 과거에도 한번 substr함수를 접했던것 같은데, 제대로 다시 떠올리지 못한게 아닌가 싶은 생각이 든다. 

혹시 다음에도 이번 substr() 을 활용하는 형태의 문제를 만나게 되면 다시한번 이 글을 검색해서 이 내용도 같이 또 공부해보도록 하자. 

지속적으로 반복 학습을 통해서 내것으로 만들어내도록 하자. 

 

+++++++++++++++

추가적으로 구글링을 통해 발견한 블로그를 통해서 알게 된 정보인데, 

substr()함수의 경우 인자를 하나만 주면, 그 위치부터 끝까지로 이루어진 substr을 만들어 준다고 한다. 

https://min-ingful.tistory.com/44

 

[C++ STL] string::substr 사용법 정리

python에서 str 자료형을 슬라이싱 하는 것에 익숙해진 상황에서, 오랜만에 C++에서 substr 함수를 사용했는데 코드가 생각했던 대로 동작하지 않았다. www.cplusplus.com/reference/string/string/substr/ string::subs

min-ingful.tistory.com

이 개념도 잘 이용해 보도록 하자. 

 

 

  Comments,     Trackbacks