나 개발자 진짜 되냐?

백준 C++ 25501번 재귀의 귀재 ( s.length, string_view ) 본문

C++을 시작해봐요!/구현문제를 알아보아요!

백준 C++ 25501번 재귀의 귀재 ( s.length, string_view )

Snow Rabbit 2026. 2. 2. 21:36

 

오늘은 2월 2일!

거꾸로 해도 2월 2일!

그래서 내가 오늘 풀 문제는

재귀의 귀재!

 

킄킄킄


 

똑똑하다... 이 함수를 그니까 보고

몇 번 호출하는지, 반환값으로 알기 이 두 개를 더 센다는 거 같다.

 

일단 복사보단, 위에 코드를 한번 치면서 재귀를 익혀보려고 했다.

( 시도는 좋았다. )

시도만 좋았다.

 문제자체를 다 준거 같은데도 뭔가 그 재귀함수자체를 바로 이해하지 못했다.

 

 

일단 하나씩 보면.. l이 시작인 거 같고 r이 글자수인 거 같다.

l이 횟수인 거 같다. 그래서 글자수만큼 함수가 돌지 않았으면 0을 출력하는 거 같고

글자수만큼 함수가 돌았다면 1을..?

 

 

글자를 가져와서 strlen길이..-1? 만큼 돌리는 거 같은데..

 

아 그리고 자꾸 뭐

 

이거 뜬다..

 

에잇..


 

제씨에게 물어보았다.

펠린드롬 글자는

맨 첫 글자와 맨 끝자가 같아야 하기 때문에

비교가 첫차와 끝자라 고한다.

그래서 그다음을 비교할 땐, 첩자 +1, 끝자 -1이라고 한다.

그러니 아까 위에 내가 뭐 횟수녜 뭐녜는 다 그냥 틀린 추측인 것..!!

그렇다면 count가 없으니 따로 만들어줘야겠다!

 

그리고 c++언어로 바꾸라는 거보니까 좀 함수를 만져도 되나 보다..!

 

제시는 count를 전역변수로 해주라고 했다.

그리고 그 함수가 시작할 때 ++ 해주라고 했다.

그리고

string을 char *로 받으려면

s.c_str()

 

이거 두 개만 해주면 끝난단다.

 

 

 


 

하나씩 정리해 보자.

strlen(s)

String Length의 약자

문자열의 시작점부터 \n을 만날 때까지 문자의 개수를 세어주는 함수

여기서 들어갈 매개변수는

const char*란다.

 

const char*

const char이란!

const = 읽기만 해! 글자를 고치지 마!

char 문자 하나를!

* 포인터! 위치를 알려주는 친구

 

즉, 글자 자체를 가져오는 게 아니라 주소만 적어두어서 읽기 전용으로만 쓸 수 있게 하는 것!

메모리에 좋다고 한다.

 

근데 사실 이거 두 개 다 구형버전이라

이렇게 안 쓴다고 한다.

 

이 구형버전을 사용했기 때문에

밑에서 c_str()을 사용해서

const char*을 변환시켜 주기 위한 친구! 인 셈!

 

그럼 이거를 어떻게 최신화시키냐!!

 

그냥 const string으로 해주면  된다.

 

 

strlen 말고 s.length()를 써주면 되는데

여기서 중요한 건

저 length는 반환값이 정해지지 않았어서

(int)로 캐스팅해줘야 한다!! 그래서 앞에 int가 들어간다!

 

가장 효율적이라며 string_view를 소개해주었다.

문자열의 주소를 통해서 가는 것보다 더 빠른

그냥 눈팅만 하겠다! 보기만 하는 창문인 셈

그럼 const도 안 쓰고

string_view s, int l, int r;

해주면 된다.

 

 

자라란!

 


 

오늘까지! 구현문제를 풀고

오늘 혹은 내일부터 solved.ac에 있는 class문제를 뽑아서 풀어볼 예정이다.!

 

클래스 4까지만 풀면 모든 코테를 풀 수 있다던데..

정말 나.. 문제 풀 수 있을까?!!?

 

도전!!