Dev/Python

    [파이썬/Python] 정규표현식 - 리스트 내 원소들 중 숫자만 필터링하기

    import re page = ['처음', '5개 앞', '이전', '6', '7', '8', '9', '10', '다음', '5개 뒤', '마지막'] p = re.compile("^[0-9]+$") page_only_digit = list(filter(p.match, page)) print(page_only_digit) # ['6', '7', '8', '9', '10'] 원래는 p.match 부분에 isdigit 내장 함수를 사용하려고 했는데, '5개 앞' 같이 원소 내 공백이 존재하면 내부적으로 구현되어 있는 ord 메서드를 적용할 수가 없어서 먹히질 않았습니다. 그래서 어쩔 수 없이 정규표현식으로 걸러줬습니다.

    [파이썬/Python] Collections - Deque

    [파이썬/Python] Collections - Deque

    들어가며 코딩테스트에 응시할 때 빠르게 찾아볼 수 있도록 따로 정리한 내용입니다. 공부하시기에는 빈약한 내용일 수 있음을 미리 알려드립니다. 공식 문서를 참고할 때에는 대부분의 기업이 이용하고 있는 프로그래머스 코딩테스트 환경에 적용된 python 3.8 버전의 collections을 참고했습니다. 코딩테스트용으로 작성한 글인 만큼 빠르게 훑을 수 있어야 하므로 경어체를 사용하지 않겠습니다. 초기화 방법 1. 기존의 iterable 객체 없이 빈 큐를 초기화 from collections import deque queue = deque() print(d) # deque([]) 2. 기존의 iterable 객체 없이 큐를 구현하되, 구현하면서 임시의 iterable 객체를 이용하여 초기화 from coll..

    [파이썬/Python] 리스트(list)의 메소드 시간 복잡도(Big-O) 정리

    [파이썬/Python] 리스트(list)의 메소드 시간 복잡도(Big-O) 정리

    파이썬으로 코딩테스트를 진행하며 가장 많이 쓰는 기본 자료형은 리스트(list)와 문자열(string), 딕셔너리(dictionary), 집합(set) 정도이다. 기본 자료형을 벗어난 것 중 많이 쓰는 것은 collections 모듈의 Counter와 deque 정도가 있겠고, 아주 가끔 itertools 모듈의 permutations 혹은 combinations 정도를 쓰는 것 같다(사실 이 둘은 시간복잡도가 터져버리기 때문에 거의 안 쓴다). 약간 난이도가 있는 코딩테스트 문제들은 항상 시간복잡도와 공간복잡도에 대한 제약이 주어진다. 특히 시간복잡도에 대한 제약은 아주 중요하며, 이를 고려하기 위해서는 이용하는 자료형의 메소드 별 시간 복잡도를 알고 있어야 한다. 그래서 이번 기회에 정리를 해볼까 한..

    [파이썬/Python] for - else / while - else 활용

    [파이썬/Python] for - else / while - else 활용

    반복문 (for / while) - else 문 개념 파이썬에서는 다른 프로그래밍 언어와 다르게 반복문 for과 while문에 else를 같은 indentation에 놓을 수 있다. 그 else의 기능은 무엇일까? 반복문 도중 break가 되지 않고 끝까지 반복을 실행했을 경우 else에 있는 코드를 실행하게끔 하는 것이다. 코드를 통해 바로 알아보자. 코드 예시 (1) 간단한 예시 특정 요소가 리스트 안에 있는지 없는지 확인하고 싶다고 해보자. for-else 문을 이용하면 다음과 같이 깔끔하게 코드를 짤 수 있다. bucket = ['딸기', '당근', '수박', '참외', '메론'] for fruit in bucket: if fruit == '딸기': print('딸기가 바구니에 있습니다!') br..

    [파이썬/Python] 리스트의 정렬 방법 - sort함수와 sorted함수

    [파이썬/Python] 리스트의 정렬 방법 - sort함수와 sorted함수

    리스트의 정렬 프로그래밍 언어에서 리스트 혹은 배열을 정렬하는 알고리즘은 다양하다. 가장 간단한 선택 정렬, 버블 정렬부터 삽입 정렬, 쉘 정렬, 병합 정렬, 퀵 정렬 등의 효율성을 높인 알고리즘들이 존재하고 특별한 형태로 기수 정렬이나 트리 정렬 등의 알고리즘도 존재한다. 하지만 이런 내용들은 알고리즘과 관련된 포스팅할 때 더욱 자세히 하도록 하고, 오늘은 파이썬 내장함수를 이용한 정렬 방법을 정리해보려고 한다. 파이썬에서 리스트를 정렬하는 내장 함수는 대표적으로sort와sorted가 존재한다. 기본적인 함수의 사용 방법과 활용 예시를 살펴보고, 두 함수의 차이를 비교하여 두 함수를 어떻게 하면 더욱 효율적으로 사용할 수 있는지 파악해보자. sort와 sorted 함수 (1) sort 함수의 기본 형태..

    [파이썬/Python] 순열과 조합 (Permutation and Combination)

    [파이썬/Python] 순열과 조합 (Permutation and Combination)

    순열과 조합 순열 (Permutation) 순열이란 서로 다른 n개에서 r개를 선택할 때 순서를 고려하여 선택한 경우의 수를 나열하는 방법이다. 보통 Permutation의 첫 글자 P를 따서 nPr로 표현하며 계산식은 아래와 같이 쓸 수 있다. 0 ≦ r ≦ n nPr = n x (n-1) x (n-2) x (n-3) x …… x (n-r+1) ※ n부터 (n-r+1)까지 곱해지는 수는 총 r개 nPr = n! / (n-r)! 가령, 알파벳이 써져 있는 카드 4개가 있다고 해보자. 각 카드에는 A, B, C, D가 써져 있는데 이 중에서 순서를 고려하여 2장을 뽑고 싶다고 하자. 공식에 따르면 4P2 = 4 x 3 = 12 혹은 4P2 = 4! / (4-2)! = 4 x 3 x 2 x 1 / 2 x 1..

    [파이썬/Python] 재귀함수(Recursive function)와 메모이제이션(Memoization)

    [파이썬/Python] 재귀함수(Recursive function)와 메모이제이션(Memoization)

    재귀함수(recursive function)란 함수 내부에서 자기 자신(함수)을 다시 호출하는 함수이다. 잘만 활용하면 참 좋다고 생각하는데, 가장 중요한 탈출 조건을 생각해내는 것이 상당히 까다로운 편이라 권장되지는 않고 있다. 또한, 재귀함수만 이용할 경우 과도하게 스택메모리를 이용하게 되고 탈출 조건을 잘못 세울 경우 스택오버플로우 에러가 발생할 위험도 존재한다. 그래서 동적 프로그래밍(Dynamic Progrmming)처럼 재귀함수의 각 단계 결과값을 저장하여 성능을 높여주는 방법도 존재한다. 우선 재귀함수의 예시를 두 개 들어보자. 1. 팩토리얼 구하기 일반적인 for문을 이용하여 팩토리얼을 구하면 다음과 같은 코드를 짤 수 있다. def factorial_for(n): if n == 0 or ..

    [파이썬/Python] 리스트 안에서 반복문, Comprehension

    [파이썬/Python] 리스트 안에서 반복문, Comprehension

    요즘 틈 나는 대로 프로그래머스의 코딩 테스트 문제를 풀고 있다. 지금 Python으로 풀 수 있는 Level 1 문제들은 세 문제만을 남겨두고 있으며, 슬슬 Level 2 문제들도 풀어나가고 있다. 코드 정리는 귀찮아서 못하고 있는데 일단 Git에만 푸쉬해두고 있는 상태다. (Git에도 사실 다 푸쉬는 못했다..ㅎ) 아 글은 언제 쓰냐아으ㅏ으아아ㅏㅏ 귀찮다. 아직 저레벨 수준의 코딩 테스트 문제들이었지만, 문제를 풀어나가며 유용했던 함수 및 메소드를 정리해볼까 한다. 오늘은 그 첫 번째 순서로 Python에서 아주 유용한 comprehension이다. Comprehension Comprehension이란, iterable한 객체를 생성하는 방법 중 하나로 아주 유용하게 쓰고 있다. 나는 list랑 di..