Palindrome(회문)
거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등이다.
ex) 기러기, madam, malayalam ....
Palindrome 판별 방법
제일 처음과 제일 끝의 문자열 비교 ➞ 두번째와 끝에서 두번째 비교 ➞ 세번째와 끝에서 세번째 비교 .......
➞ 겹치는 지점까지 비교해서 두 문자가 같은지 다른지 판별하면 된다. 비교했을 때 같은 값이 나온다면 넘어가고 다른 값이 나오면 팰린드롬이 아니기 때문에 멈추면 된다.
알고리즘 구현
Palindrome판별 방법을 재귀함수로 구현해보자.
def palindrom(num_list, first, last):
if(last <= first):
return 1
if(num_list[first] != num_list[last]):
return 0
else:
return (palindrom(num_list, first+1, last-1))
palindrome 문제를 재귀함수로 구현하게 되면 단점이있는데 바로 호출이 잦아지면 스택 오버플로우 문제를 격을 수도 있다. 재귀함수로 구현한 것과 loop으로 구현한것 모두 시간복잡도는 O(n)이지만 공간복잡도는 O(n), O(1)이기 때문에 loop가 공간적으로 더 효율이 크다.
그래서 loop로도 구현해보자.
def palindrome(word_list):
n = len(word_list)
for i in range(n // 2): # 절반만 반복
if word_list[i] != word_list[n - 1 - i]: # 앞과 뒤에서 비교
return 0
return 1
'하루 30분 알고리즘 기초다지기' 카테고리의 다른 글
| [파이썬] Permutation 순열 나라야나 판디타 알고리즘 구현하기 (0) | 2024.09.26 |
|---|---|
| [python] 최대공약수 유클리드 호제법 알고리즘 (1) | 2024.09.25 |
| [python] 하노이 탑/타워 알고리즘 재귀함수로 구현하기 (Hanoi Tower) (0) | 2024.09.24 |
| 피보나치 수열을 구하는 알고리즘 - 행렬 제곱 (4) | 2024.09.22 |
| 파이썬 정렬 알고리즘 Sort Algorithms (1) | 2023.10.04 |