TIL 10일차 정리
오늘은 10시에 CS 실시간 강의를 듣고 오후 2시에 알고리즘 실시간 강의를 들었다. 알고리즘과 CS 강의가 개인적으로 많이 어려웠지만 따로 공부를 해보면서 정리를 해보았다.
오늘은 독학하는 시간이 많아서 코드 정리를 바로 해보았습니다.
코드 정리
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5))
이 코드는 팩토리얼을 구현한 코드입니다. 팩토리얼은 ! 라는 기호로 사용 합니다. EX) 5! = 5 * 4 * 3 * 2 * 1 입니다.
이걸 코드적인 문법으로 풀어보면
Factorial(n) = n * Factorial(n -1)
Factorial(n - 1) = (n - 1) * Factorial(n -2)
.........
Factorial(1)
Factorial(1) 이 남을때 까지 곱하는 구조로 사용합니다.
def count_down(number):
if number < 0:
return
print(number)
count_down(number - 1)
count_down(60)
이 코드는 재귀함수 코드입니다.
재귀함수란 자기 자신을 계속해서 반복되게 리턴하는 함수를 칭합니다.
count_down() 이라는 함수를 만들고, 그 함수안에 다시 자신의 함수를 불러내서 파라미터로 받은 number 값이 if number < 0: 을 통해서 number 값이 0 이 될때까지 무한 반복하고 0이 된다면 종료가 되는 로직입니다.
input = "abcba"
def is_palindrome(string):
if len(string) <= 1:
return True
if string[0] != string[-1]:
return False
return is_palindrome(string[1:-1])
print(is_palindrome(input))
이 함수는 펠린드롬이라는 함수입니다.
펠린드롬: 회문(Palindrome) 이라는 단어입니다. 똑바로 읽으나 거꾸로 읽으나 똑같은 단어나 문장을 칭합니다.
EX) 토마토, 오디오, 아시아, 일요일, 소주만병만주소
회문인지 확인하는 방법
- 각각 처음과 끝이 동일한 형태의 문자인지 확인해야 한다.
- 단 마지막 남은 가운데 글자는 뭐가 오든 상관이 없습니다.
위 함수를 리뷰 해보면 input 값에 "abcba" 라는 값이 함수 파라미터로 들어옵니다. 그 후에 조건문으로 파라미터 값이 1보다 작거나 같으면 True를 리턴합니다 이유는 한글자는 어떻게 읽어도 같기 때문에 바로 True를 리턴해 줍니다 또한 밑에 로직과도 상관관계를 맺습니다.
두 번째 조건문에서 파라미터에 맨앞과 맨끝값이 같지 않으면 회문이 아니기 때문에 False를 리턴해줍니다. 만약 맨앞과 맨끝이 같다면 바로 밑에서 is_palindrome(string[1: -1]) 이라는 로직이 실행되면서 맨앞 한글자와 맨뒤 한글자를 잘라서 리턴해줍니다 그리고 다시 로직이 처음부터 반복되면서 마지막 한개가 남았을 때 첫번째 조건문에서 True를 리턴 해 줍니다.
오늘은 이렇게 재귀함수, 팩토리얼, 펠린드롬에 대해서 알아 보았습니다.