본문 바로가기
팩토리얼(계승)함수의 재귀적 정의와 파이썬: 수학과 코딩의 만남🤍 이산수학의 함수 챕터를 공부하다가 팩토리얼의 '재귀적 정의'를 보고 왜 굳이 이렇게 정의를 해야 하는지 의문이 생겼다.팩토리얼은 지난 글에서도 한 번 다뤘지만 이번엔 좀 다른 관점에서 바라보려고 한다.팩토리얼이란? 팩토리얼은 양의 정수 n에 대해 n!라고 쓰고, 1부터 n까지의 모든 정수를 곱한 값이다. 수식으로 보면 다음과 같다. n!=1×2×3×⋯×n 그리고 하나 기억할 것은, 수학에서는 0!=1 로 정의되어 있다는 것이다. 이게 앞으로 다룰 재귀적 정의에서 중요한 역할을 하게 된다. 재귀적 정의, 팩토리얼의 마법 공식팩토리얼을 계산하는 방법은 여러 가지가 있지만, 오늘의 주인공은 재귀적 정의이다. 재귀(recursion)는 어떤 문제를 해결하기 위해 그 문제의 더 작은 버전을 반복적으로 해결하는 방.. 2025. 3. 27.
[파이썬] os 모듈, 언제 어떻게 쓰면 좋을까? 이번 포스팅에서는 다시 파이썬으로 돌아와 os모듈에 대해 알아본다. 파이썬의 os 모듈은 이름에서 알 수 있듯이 운영체제와 상호작용하는 다양한 기능을 제공하는 라이브러리로, 파일과 디렉토리를 관리하거나 시스템 명령어를 실행하는 등의 작업을 할 때 유용하다. 예를 들어, 운영체제 내의 특정 디렉토리의 파일 목록을 가져오거나, 파일 이름을 수정하고, 디렉토리를 생성하거나 삭제할 때 os 모듈을 사용할 수 있다. 따라서 텍스트, 이미지, 파이썬 파일 등 어떤 종류의 파일이든 다룰 수 있다. os 모듈이 필요한 이유디렉토리나 파일을 핸들링하는 일은 GUI나 CLI에서도 충분히 가능한데 "굳이 왜" 파이썬 os모듈을 사용해야 하는지 의문이 들 수 있다. 하지만 os 모듈은 우리가 일상에서 하는 많은 노가다 업무를.. 2025. 3. 21.
[파이썬기초프로그래밍] 중첩 선택 구조 (feat. 놀이공원) 파이썬 프로그래밍에서 조건에 따라 다른 코드를 실행하는 선택 구조는 매우 중요하다. 특히 복잡한 조건을 처리해야 할 때 중첩 선택 구조가 필수적이다. 중첩 선택문은 영어로 Nested if statement라고 한다. Nested라는 단어에서 알 수 있듯, 중첩 선택문은 if문 안에 또 다른 if문이 들어가 있는 구조다.  "이 안에 너 있다...."가 갑자기 왜 생각나지..ㅋㅋㅋ 중첩 선택문의 구조중첩 선택문은 다음과 같은 구조를 가진다. if 조건 1: # 조건 1이 참일 때 실행되는 코드 if 조건 2: # 조건 1과 조건 2가 모두 참일 때 실행되는 코드 else: # 조건 1은 참이지만 조건 2는 거짓일 때 실행되는 코드else: # 조건 1이 거짓.. 2025. 3. 13.
[파이썬] 다형성(Polymorphism) Part 1. 개념 이해하기 (feat. 우주청소로봇) 다형성이란? 다형성(polymorphism)이란 "같은 이름을 가진 기능이 상황에 따라 다르게 동작함"을 의미한다. 비유를 해 보면, 똑같은 단어 "먹다"도 상황에 따라 다르게 쓰인다. "밥을 먹다"일수도 있고, "빵을 먹다"일수도 있다.  마찬가지로 파이썬에서 다형성은 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 이 개념을 코드로 구현한다. 예를 들어 같은 이름의 함수나 메서드를 쓰더라도 어떤 객체(object)를 다루느냐에 따라 결과가 달라질 수 있다.  예를 들어, 우주에서 쓰레기를 수집하는 로봇이 있다고 가정해 보자.  "진공 로봇"은 우주 먼지를 빨아들여 블랙홀 에너지로 바꾼다. "분쇄 로봇"은 고철 조각을 나노 입자로 분쇄해 우주로 .. 2025. 3. 7.
[파이썬] 슬라이싱 기본 규칙 - 문자열, 튜플, 리스트 파이썬의 슬라이싱 seq[start:stop:step]은 문자열, 리스트, 튜플 등 시퀀스 타입에서 특정 범위를 추출하는 도구로 다음과 같은 규칙을 갖는다. 1. 기본 구조형식: seq[start:stop:step]start: 시작 인덱스 (포함)stop: 종료 인덱스 (제외, 이 인덱스 직전까지 포함)step: 이동 간격 (기본값 = 1)위 세 매개변수는 모두 선택적이며, 생략 시 기본값이 적용된다. 2. 기본 동작슬라이싱은 start에서 시작해 stop 직전까지 step 간격으로 요소를 추출한다. 인덱스는 0부터 시작하며, 음수 인덱스도 사용 가능하다.  예시: text = "Python"인덱스: P(0) y(1) t(2) h(3) o(4) n(5)음수 인덱스: P(-6) y(-5) t(-4) h(-.. 2025. 3. 5.
[파이썬] 딕셔너리 - 딕셔너리 내용을 삭제하는 메서드 메서드/키워드 설명인자반환값특징예시del dict[key]특정 키-값 쌍 삭제키없음키가 없으면 KeyError 발생del my_dict['a']dict.pop(key, default)특정 키를 삭제하고 값을 반환키(기본값)삭제된 값키가 없으면 default 반환, 기본값 없으면 KeyError 발생my_dict.pop('a')dict.popitem()마지막 키-값 쌍을 삭제하고 반환없음(키, 값) 튜플파이썬 3.7+부터는 LIFO 순서로 삭제my_dict.popitem()dict.clear()모든 요소 삭제없음없음딕셔너리를 완전히 비움my_dict.clear()** LIFO(Last In, First Out) : 마지막에 들어온 것이 먼저 나가는 원칙. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거됨... 2025. 2. 21.
[파이썬] 리스트 - 리스트 내용을 삭제하는 메서드 .remove(), .pop(), clear() 비교 메서드기능인자반환값특징remove(x)리스트에서 첫번째로 등장하는 x 삭제삭제할 요소 x(제거할 값을 받음)없음 (None)존재하지 않는 요소를 삭제하려 하면 ValueError 발생pop(i)i번째 요소 제거 후 반환삭제할 인덱스 i (인덱스 지정하지 않으면 마지막 요소 삭제)삭제된 요소인덱스를 벗어나면 IndexError 발생clear()리스트의 모든 요소 삭제없음없음 (None)리스트를 빈 상태 [ ]로 만듦 예제 코드lst = [10, 20, 30, 40, 50]# remove()lst.remove(30) # [10, 20, 40, 50]# pop()removed_item = lst.pop(1) # [10, 40, 50], removed_item = 20# clear()lst.clear() .. 2025. 2. 21.
[파이썬] 정규 표현식(Regex) 문법 - ?, *, +의 차이점 정리 다음 코드 예시는 특정 문자열에 'u'의 포함 여부 및 포함 횟수에 따라 해당 문자열이 패턴에 매치하는지 여부를 판별해주는 프로그램을 나타낸다.import re# 정규 표현식 패턴을 컴파일patterns = [ re.compile(r'colou?r'), # u가 0번 또는 1번 re.compile(r'colou*r'), # u가 0번 이상 re.compile(r'colou+r') # u가 1번 이상]# 테스트 문자열test_strings = [ 'color', # "color"는 u가 없으므로 test case로 사용 'colour', # "colour"는 u가 1번 있음 'colr', # "colr"은 u가 없지만, 다른 경우에도 매칭될지.. 2025. 2. 20.
[파이썬] 정규 표현식(Regex) 1. 컴파일, Match 객체 (예제: 전화번호 찾기) 아래 예제는 정규 표현식(Regular Expression)을 이용해 전화번호 패턴을 찾아내는 프로그램이다. >>> import re>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')>>> mo = phoneNumRegex.search('My number is 415-555-4242.')>>> print('Phone number found: ' + mo.group())Phone number found: 415-555-4242예제 출처: Automate the Boring Stuff with Python  (https://automatetheboringstuff.com/2e/chapter7/) 위 코드를 한 줄씩 살펴보자. import re파이썬 내장 모.. 2025. 2. 20.