재귀(Recursion)란 무엇인가?재귀는 큰 문제를 작은 단위로 나누어 해결하는 데 매우 유용한 프로그래밍 기법입니다. 각 재귀 호출은 그 자체로 또 다른 재귀 호출을 발생시키며, 이러한 과정이 반복되면서 문제가 점진적으로 해결됩니다.재귀 함수의 핵심에는 두 가지 유형의 경우가 있습니다.기저 사례(Base Case): 재귀가 언제 종료되어야 하는지를 알려주는 조건으로, 무한 루프를 방지하는 역할을 합니다.재귀 사례(Recursive Case): 자신이 속한 함수를 다시 호출하며 문제를 단계적으로 축소해 나가는 부분입니다.재귀적 해
파이썬에서는 re 모듈의 re.split() 함수와 정규식을 활용하면 문자열을 개행 문자(\n)를 기준으로 손쉽게 분할할 수 있습니다. 아래 예제는 여러 줄로 이루어진 문자열을 개행 문자 기준으로 나누어 리스트로 반환합니다.예제import re s = I find Tutorialspoint useful print(re.split(r[\n], s))출력 결과위 코드를 실행하면 다음과 같은 결과가 출력됩니다.[I find, Tutorialspoint, useful]연속된 개행 문자 처리하기만약 문자열에 개행 문자가 연속해서 여러 개
파이썬 정규식(regular expression)을 활용하면 문자열에 포함된 공백, 탭, 줄바꿈 같은 모든 공백 문자를 간단하게 제거할 수 있습니다.여기서 핵심이 되는 패턴은 \S입니다. \S는 공백이 아닌 모든 문자(non-whitespace character)를 의미하며, 그 반대인 \s는 스페이스, 탭(\t), 줄바꿈(\n) 등 모든 공백 문자를 나타냅니다.예제 1: 공백이 아닌 문자만 추출하기re.findall() 함수에 \S 패턴을 적용하면, 주어진 문자열에서 공백 문자를 제외한 모든 문자를 리스트 형태로 반환합니다.imp
파이썬 정규 표현식에서 공백 문자를 찾을 때 가장 많이 쓰이는 메타 문자는 \s입니다. 그런데 \s는 스페이스뿐 아니라 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r)까지 모두 포함하기 때문에, 공백은 매칭하되 줄바꿈은 제외하고 싶다는 요구사항에는 그대로 사용할 수 없습니다. 이 글에서는 줄바꿈을 배제하고 공백만 매칭하는 방법을 예제와 함께 살펴봅니다. \s가 줄바꿈까지 매칭되는 이유 \s는 내부적으로 [ \t\n\r\f\v]와 같은 의미입니다. 즉, 폼 피드나 수직 탭을 포함한 모든 공백 계열 문자가 매칭 대상이 됩니다. 아래 예
파이썬 정규식에서 문자 클래스 [\n\t]를 사용하면 주어진 문자열에서 탭(\t)과 줄 바꿈(\n) 문자만 일치시키고, 일반 공백은 제외할 수 있습니다.예제import re text = I find Tutorialspoint useful print(re.findall(r[\n\t], text))출력 결과위 코드를 실행하면 다음과 같은 출력이 생성됩니다.[\n]동작 원리대괄호 [ ]로 묶인 문자 클래스는 내부에 나열된 문자 중 하나라도 일치하면 해당 문자를 결과에 포함합니다. 여기서 \n은 줄 바꿈 문자를, \t는 탭 문자
파이썬에서는 re 모듈의 re.sub() 함수를 사용하면 문자열에 포함된 탭(tab)과 줄바꿈(newline) 같은 공백 문자를 손쉽게 제거할 수 있습니다.정규식 패턴 이해하기핵심 패턴은 \s+입니다. \s는 스페이스, 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r) 등 모든 종류의 공백 문자를 의미하며, 뒤에 붙은 +는 해당 문자가 하나 이상 연속으로 나타나는 경우를 모두 찾습니다. 이를 공백 한 칸(" ")으로 치환하면 여러 개의 공백 문자도 깔끔하게 정리됩니다.예제 코드import re result = re
정규식을 사용하면 주어진 문자열에서 공백과 줄바꿈을 제외한 모든 문자를 손쉽게 매칭할 수 있습니다. 핵심은 부정 문자 클래스(negated character class)인 [^ \n]입니다. 대괄호 안 맨 앞의 캐럿(^)은 해당 문자들을 제외한다는 의미로, 즉 공백( )과 줄바꿈(\n)이 아닌 모든 문자와 일치시킵니다.패턴 구조 살펴보기^ : 문자열의 시작 위치[^ \n]* : 공백과 줄바꿈을 제외한 문자가 0개 이상 반복됨$ : 문자열의 끝 위치따라서 ^[^ \n]*$ 패턴은 문자열 전체가 공백이나 줄바꿈 없이 구성되어 있을 때만
파이썬에서 문자열 내의 특정 문자를 찾을 때 정규식(Regular Expression)을 활용하면 매우 간편합니다. 이 글에서는 (a|b) 패턴을 사용하여 주어진 파이썬 문자열에서 a 또는 b에 해당하는 모든 문자를 찾아내는 방법을 소개합니다.정규식에서 |(OR 연산자)는 왼쪽 또는 오른쪽 패턴 중 하나와 일치함을 의미합니다. 따라서 (a|b)는 문자열에서 a 혹은 b가 나타나는 위치를 모두 찾아냅니다.또한 re.I 플래그를 함께 사용하면 대소문자를 구분하지 않고 매칭을 수행할 수 있습니다. 즉, A와 a, B와 b를 동일하게 취급
중첩 문자 클래스 빼기란 무엇인가?정규 표현식에서 빼기(subtraction) 연산에 사용되는 문자 클래스 안에는 완전한 문자 클래스 문법을 그대로 사용할 수 있습니다. 이 덕분에 빼지는 클래스 안에서 또 다른 클래스를 빼는 중첩 연산이 가능해집니다.예를 들어 [0-9-[0-7-[0-3]]] 패턴을 살펴보겠습니다. 이 표현식은 먼저 0-7 범위에서 0-3을 뺀 결과인 [4-7]을 만들고, 다시 0-9 범위에서 그 결과를 뺍니다. 최종적으로 [0-9-[4-7]], 즉 [0-38-9]와 동일해지며, 따라서 이 패턴은 012389 문자열
일부 정규 표현식 엔진은 문자 클래스(character class) 내부에서 강력한 집합 연산을 수행할 수 있도록 지원합니다. 이를 활용하면 다음과 같은 정교한 매칭이 가능합니다.차집합(Subtraction): 한 클래스에는 속하지만 다른 클래스에는 속하지 않는 문자 매칭교집합(Intersection): 두 클래스 모두에 속하는 문자 매칭합집합(Union): 여러 클래스 중 어느 하나라도 속하는 문자 매칭문자 클래스 연산이란?문자 클래스 연산은 대괄호 [] 안의 문자 집합들을 마치 수학의 집합처럼 다루는 기능입니다. 복잡한 조건을
반복 문자 클래스란?정규식에서 문자 클래스(character class) 뒤에 ?, *, + 같은 반복 연산자가 붙은 형태를 반복 문자 클래스(repeating character class)라고 부릅니다.문자 클래스 전체가 반복된다?, *, + 연산자로 문자 클래스를 반복하면, 매칭된 단 하나의 문자가 아니라 문자 클래스 전체가 반복됩니다.예를 들어 정규식 [0-9]+는 333뿐만 아니라 579처럼 서로 다른 숫자들도 모두 매칭할 수 있습니다. 즉, 0부터 9 사이의 어떤 숫자든 여러 번 나오기만 하면 일치하는 것입니다.역참조(Ba
정규식에서 대부분의 문자와 글자는 자기 자신과 일치합니다. 하지만 메타문자(metacharacter)라고 불리는 특수 문자들은 자기 자신과 매칭되지 않습니다. 대신 특정 패턴이 일치해야 함을 나타내거나, 정규식의 일부를 반복하거나 변경하는 역할을 수행합니다.정규식 메타문자 전체 목록. ^ $ * + ? { } [ ] \ | ( )대괄호 [ ] — 문자 클래스먼저 살펴볼 것은 [와 ]입니다. 이 기호들은 문자 클래스(character class)를 나타내는 데 사용되며, 매칭하고 싶은 문자들의 집합을 의미합니다.문자들을 개별적으로 나
파이썬 정규 표현식의 부정 문자 클래스란?파이썬 정규 표현식을 다루다 보면 부정 문자 클래스(negated character class)를 자주 접하게 됩니다. 부정 문자 클래스는 특정 문자들을 제외한 나머지 모든 문자와 매칭할 수 있게 해주는 강력하고 유용한 기능입니다.문자 클래스(Character Class)의 기본 개념먼저 일반적인 문자 클래스부터 살펴보겠습니다. 정규 표현식 [abdfgh]는 a, b, d, f, g, h 중 하나에 해당하는 단일 문자와 일치합니다. 이처럼 대괄호 안에 여러 문자를 나열한 패턴을 문자 클래스라
time.time() 함수로 현재 시간 가져오기특정 시점의 타이머 틱(timer tick) 값을 얻으려면 time.time() 함수를 사용하면 됩니다. 이 함수는 에포크(epoch, 1970년 1월 1일 00:00:00 UTC) 이후 경과한 시간을 초 단위의 부동 소수점(floating point) 숫자로 반환합니다.다만 반환값이 항상 부동 소수점 형태라고 해서, 모든 시스템이 1초보다 더 정밀한 시간을 제공하는 것은 아니라는 점에 유의해야 합니다.예제 코드import timecurr_time = time.time()print(cu
Python에서 시간 측정: time.clock() vs time.time()Python에서 코드 실행 시간을 측정하거나 벤치마킹을 해야 하는 상황이라면, time.time()보다 time.clock()을 사용하는 것이 더 적합합니다.time.time()은 모든 플랫폼에서 UTC 기준 에포크(epoch, 1970년 1월 1일) 이후 경과된 초를 부동 소수점 숫자로 반환합니다. 즉, 현재 시각을 나타내는 데는 유용하지만 정밀한 성능 측정용으로 설계된 것은 아닙니다.운영체제별로 다른 time.clock()의 동작반면 time.clock
Python에서는 time 모듈의 sleep() 메서드를 사용하여 호출 스레드를 원하는 시간만큼 일시 중지할 수 있습니다. 이 메서드는 스레드를 중지시킬 시간을 초 단위의 숫자로 인자로 받습니다.예제import time while(True): print(10초마다 출력됩니다) time.sleep(10)출력 결과10초마다 출력됩니다 10초마다 출력됩니다 10초마다 출력됩니다 ...위 코드를 실행하면 print 문이 10초 간격으로 반복해서 출력됩니다.소수점 단위로 지연 시간 설정하기time.sleep() 메서드는 정수뿐
Python의 datetime 모듈에서 제공하는 combine() 메서드를 사용하면 date 객체와 time 객체를 하나로 결합하여 datetime 객체를 손쉽게 만들 수 있습니다.time 객체 없이 date 객체만 가지고 있다면, datetime.min을 활용해 시간을 최솟값으로 초기화하면 됩니다. 여기서 최솟값이란 자정(00:00:00)을 의미합니다.예제 1: combine() 메서드 사용하기from datetime import datefrom datetime import datetimemy_date = date.today()m
Python 날짜 연산의 기본: timedelta로 일수 빼기Python에서는 datetime 모듈이 제공하는 timedelta 객체를 활용하면 날짜에서 원하는 기간을 아주 간단하게 빼거나 더할 수 있습니다. 핵심 원리는 다음과 같습니다.빼고 싶은 시간(예: 하루)만큼의 timedelta 객체를 생성합니다.해당 객체를 날짜 값에서 빼줍니다.기본 예제: 어제 날짜 구하기아래 코드는 오늘 날짜에서 하루를 빼서 어제 날짜를 구하는 가장 기본적인 예제입니다.from datetime import datetimefrom datetime imp
파이썬에서는 datetime 모듈의 fromtimestamp() 함수를 사용하여 유닉스(UNIX) 타임스탬프를 날짜로 손쉽게 변환할 수 있습니다. 이 함수는 타임스탬프 값을 입력으로 받아 해당 시점에 대응하는 datetime 객체를 반환합니다.반환된 datetime 객체는 strftime() 메서드를 활용하면 원하는 형식의 문자열로 출력할 수 있습니다.예제import datetime# 유닉스 타임스탬프를 datetime 객체로 변환timestamp = datetime.datetime.fromtimestamp(1500000000)#
파이썬에서 현재 주(week) 번호를 확인하고 싶다면 datetime 모듈의 isocalendar() 함수를 사용하면 됩니다. 먼저 날짜 객체를 생성한 뒤 해당 객체에 isocalendar()를 호출하면, 연도(year), 주 번호(week number), 요일(day of week) 세 가지 값을 담은 튜플(tuple)이 반환됩니다. 예제 코드 import datetime my_date = datetime.date.today() # 오늘 날짜가 2018년 1월 1일이라고 가정 year, week_num, day_of_week =