728x90
https://www.acmicpc.net/problem/25501
나의 풀이
문자열이 팰린드롬인지 판별하며, recursion이 얼마나 호출됐는지를 출력하는 문제
팰린드롬은 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때 같은 문자열을 말함
힌트
def recursion(s, l, r):
if l >= r: return 1
elif s[l] != s[r]: return 0
else: return recursion(s, l+1, r-1)
def isPalindrome(s):
return recursion(s, 0, len(s)-1)
print('ABBA:', isPalindrome('ABBA'))
print('ABC:', isPalindrome('ABC'))
재귀를 사용하여 문제를 해결하였고 global을 통해 전역변수를 함수 안에서도 쓸 수 있게 하였다.
import sys
cnt = int(sys.stdin.readline())
def recursion(s):
global answer
answer += 1
if len(s) <= 1: return 1
if s[0] != s[-1]: return 0
return recursion(s[1:-1])
for _ in range(cnt):
answer = 0
s = sys.stdin.readline()[:-1]
print(recursion(s), answer)
다른 사람의 풀이
예시로 재귀로 주었기 때문에 재귀를 쓰지 않을 때 풀이법을 생각해보지 않았는데 Python으로 압도적으로 적은 시간이 나온 코드가 있어 가져왔다.
- input을 2차원 배열 형태로 받고 a [::-1](역순 변환)을 통해 팰린드롬을 확인함
- 팰린드롬이 아니라면 몇번째에서 팰린드롬이 끝나는지 탐색함
n = int(input())
s = [input() for i in range(n)]
for i in range(n):
if s[i] == s[i][::-1]:
print(1,1+len(s[i])//2)
else:
print(0 ,end=" ")
s_ = s[i][::-1]
cnt = 1
for k in range(len(s[i])):
if s[i][k] != s_[k]:
print(cnt)
break
else:
cnt+=1
728x90
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python] 파이썬(2164) 백준 카드2 (0) | 2023.05.04 |
---|---|
[Python] 파이썬 백준(15649) N과 M(1) (0) | 2023.04.10 |
[Python] 파이썬 백준(10870) 피보나치 수 5 (0) | 2023.04.09 |
[Python] 파이썬 백준(27433) 팩토리얼2 (0) | 2023.04.09 |
[Python] 파이썬 백준(18258) 큐2 (0) | 2023.04.07 |