[백준 25501] 재귀의 귀재
글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다
목차
[백준 25501] 재귀의 귀재
https://www.acmicpc.net/problem/25501
첫 코드
#include <iostream>
#include <string>
using namespace std;
int center = 0;
int count()
{
center += 1;
return center;
}
int recursion(const char* s, int l, int r) {
if (l >= r)
return 1;
else if (s[l] != s[r])
return 0;
else
count();
return recursion(s, l + 1, r - 1);
}
int isPalindrome(const char* s)
{
return recursion(s, 0, strlen(s) - 1);
}
int main()
{
int T;
cin >> T;
char S[1001];
for (int i = 0; i < T; i++)
{
cin >> S;
cout << isPalindrome(S) << " ";
cout << count() << endl;
center = 0;
}
}
|
cs |
문제 힌트에서 주어진 코드를 활용한 해답이다. recursion()을 이용해서 1 또는 0을 출력한다. count() 함수를 만들어서 호출 횟수를 기록하여 출력한다.
※ isPalindrome()의 함수의 연산이 끝난 후에 count()를 출력해야 한다.
cout << isPalindrome(S) << " " << count() << endl;
위와 같이 한 줄로 출력을 하면 count()가 완료되지 않은 상태의 값이 1이 출력된다.
더 나은 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++)
{
string s;
cin >> s;
int center = 0;
int left = 0;
int right = s.length() - 1;
bool flag = true;
for (; left <= right; left++, right--)
{
center++;
if (s[left] != s[right])
{
flag = false;
break;
}
}
cout << (flag ? 1 : 0) << " " <<
(flag && s.length() % 2 == 0 ? center + 1 : center) << endl;
}
}
|
cs |
'⭐ 코딩테스트' 카테고리의 다른 글
[백준 2587 C++] 대표값2 (0) | 2022.11.16 |
---|---|
[백준 10817 C++] 세 수 (0) | 2022.11.08 |
[백준 2738] 행렬 덧셈 (0) | 2022.11.07 |
[백준 2750] 정렬 (0) | 2022.11.03 |
[백준 1978] 소수 찾기 (0) | 2022.07.23 |
댓글
이 글 공유하기
다른 글
-
[백준 2587 C++] 대표값2
[백준 2587 C++] 대표값2
2022.11.16 -
[백준 10817 C++] 세 수
[백준 10817 C++] 세 수
2022.11.08 -
[백준 2738] 행렬 덧셈
[백준 2738] 행렬 덧셈
2022.11.07 -
[백준 2750] 정렬
[백준 2750] 정렬
2022.11.03