포시코딩

재귀 활용 - 회문(팰린드롬), 더하기 조합 본문

자료구조알고리즘/이론

재귀 활용 - 회문(팰린드롬), 더하기 조합

포시 2023. 4. 13. 14:32
728x90

재귀를 활용한 문제들

 

팰린드롬(Palindrome)

앞뒤 구성이 같은 문자열 

ex) 기러기, 토마토, 우영우

 

재귀 함수를 통해 간단히 구현할 수 있다.

 

코드

def palindrome(str):
  if len(str) <= 1:
    return True
    
  if str[0] == str[-1]:
    return palindrome(str[1:-1])
  else:
    return False

 

문제 1

https://www.acmicpc.net/problem/1695

 

1695번: 팰린드롬 만들기

앞에서 뒤로 보나, 뒤에서 앞으로 보나 같은 수열을 팰린드롬 이라고 한다. 예를 들어 {1}, {1, 2, 1}, {1, 2, 2, 1}과 같은 수열은 팰린드롬 이지만, {1, 2, 3}, {1, 2, 3, 2} 등은 팰린드롬이 아니다. 한 수열

www.acmicpc.net

 

 

문제 2

정수 4를 1, 2, 3의 조합으로 나타내는 방법은 다음과 같이 총 7가지가 있다.

1 + 1 + 1 + 1
1 + 1 + 2
1 + 2 + 1
2 + 1 + 1
2 + 2
1 + 3
3 + 1

정수 n이 입력으로 주어졌을 때, n을 1, 2, 3의 합으로 나타낼 수 있는 방법의 수를 구하시오

 

정수 1, 2, 3, 4, 5에 대해 위 문제에서 제시되는 방법을 사용하면 한가지 패턴을 찾을 수 있는데

3 이후로는 

n의 방법의 수에 대해

fn(n) = fn(n-1) + fn(n-2) + fn(n-3)

을 성립한다는 걸 알 수 있다.

 

이걸 코드로 나타내면 다음과 같다.

def fn(n):
  if n == 1:
    return 1
  elif n == 2:
    return 2
  elif n == 3:
    return 4
  
  return fn(n-1) + fn(n-2) + fn(n-3)
728x90

'자료구조알고리즘 > 이론' 카테고리의 다른 글

퀵 정렬(Quick Sort)  (0) 2023.04.13
동적 계획법(DP), 분할 정복(Divide and Conquer)  (0) 2023.04.13
힙(Heap)  (0) 2023.04.12
Tree(트리)  (0) 2023.04.12
Hash table(해시 테이블) - Chaining, Linear probing  (0) 2023.04.12