boj 11656번 문제를 통해 접하게된 substr() 함수에 대해서.

내가 작성한 코드와는 다르게 접하게된 풀이 코드는 substr()이라는 함수를 통해서 간결하게

st.substr(i); 형태로 새로운 스트링을 만들어서 그것을 string temp값에 저장하고, temp를 vector에 차곡차곡 담아서

sort를 진행했다. 

 

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

string st;
vector<string> v;

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> st;
  int stringlen = st.length();
  for(int i = 0; i < stringlen; i++) {
    string temp = st.substr(i);
    v.push_back(temp);
  }
  sort(v.begin(), v.end());
  for(auto i : v) cout << i << '\n';
  return 0;
}

 

코드의 구조는 이런 형태이고, 이때에 substr(i) 함수가 반환값이 어떻게 되는건지, 원래의 st값은 변화가 있는 건지 등이 궁금해서, 

cout << "원래 스트링은 그대로? " << st << " 그대로" << '\n'; 

이런식의 코드를  작성해서 실행해보았다. 

 

 

결국 원래 스트링인 st는 그대로 처음 cin으로 받아들인 baekjoon으로 남아있고, substr()함수는 새로운 함수를 반환하는 함수라는걸 알 수 있었다.

 내가 구현한 방법도 나쁘지 않았지만, 이런식의 함수가 있다는걸 기억하고, 이 함수를 활용하여서 문제를 해결해보도록 하자.

substr() 함수의 경우는 

두가지 형태의 오버로드 된 함수가 있다고 하는데, 

이때 substr(i) 형태로 i부터 끝까지의 서브 스트링을 리턴해주는 함수와

substr(a,b) 형태로 a~b까지 사이의 char로 서브 스트링을 리턴해주는 함수가 있다. 

이번 풀이를 통해서 substr(i)에 대해 이해하고, 다음에 이런 형태의 문제를 만나게 되면 substr 함수를 활용해서 문제를 해결해보도록 하자. 

 

  Comments,     Trackbacks