파이썬 코테에서 자주 쓰이는 표준 라이브러리 및 내장 함수 ALL 정리 ✅ | (1) 표준 라이브러리 편

Konseo·2023년 10월 6일
6

코테풀이

목록 보기
40/59

💡 먼저 모듈, 패키지, 라이브러리에 대해 짚고 넘어가보자

  • 라이브러리 : 여러 패키지와 모듈을 모아둔 것
  • 패키지 : 특정 기능을 하는 여러 모듈을 모아둔 것
  • 모듈 : 함수와 변수, 클래스들을 모아둔 것. 일반적으로 파일 하나( 모듈.py )가 모듈이다.

즉, 라이브러리 >= 패키지 >= 모듈 이다.

참고로 특정 기업의 코딩테스트에서는 사용할 수 없는 라이브러리나 함수가 존재하기도 하니 단순히 암기하기보단 반드시 내부 동작 과정을 알고 이를 직접 구현할 줄 알아야한다. (ex. 삼성의 경우 itertools 사용 불가. 직접 백트래킹 등을 이용하여 구현하여야 함)

이제 파이썬의 1) 표준 라이브러리(빌트인 X)2) 기본 내장 라이브러리의 내장 함수 들을 살펴보겠다.

표준 라이브러리

itertools

  • permutation(순열) : n개의 데이터를 뽑아 순서를 고려하여 나열
  • product(중복순열) : 중복 허용. n개의 데이터를 뽑아 순서를 고려하여 나열
  • combination(조합) : n개의 데이터를 뽑아 순서 상관없이 나열
  • combination_with_replacement(중복조합) : 중복 허용. n개의 데이터를 뽑아 순서 상관없이 나열

직접 구현은 백트래킹 기법을 활용해 쉽게 구할 수 있으며 관련 포스팅을 참고해보자.

collections

  • Counter()
    • 등장 횟수를 세는 기능
    • iterable 객체가 주어졌을 때 해당 객체 내부에 원소가 몇 번씩 등장 했는지 계산해 준다
      from collections import Counter
      cnt = Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
      print(cnt) #Counter({'hi': 3, 'hey': 2, 'hello': 1})
  • deque()
    • 큐를 구현 시 사용한다 (bfs 수행 시 필수)
    • 가장 앞 원소 추가, 가장 앞 원소 제거에서 O(1)의 시간복잡도를 가진다
    • pop(), popleft()
  • defaultdict()
    • 딕셔너리의 작동 방식은 거의 동일
    • 인자로 주어진 객체의 기본값을 딕셔너리값의 초기값으로 지정할 수 있음
      from collections import defaultDict
      d=defaultdict(int)
      위와 같이 int로 디폴트값을 지정해주면,
      print(d[key]) # 0
      값이 지정되지 않은 키는 그 값이 자동으로 0으로 초기화된다
    • 숫자, 리스트, 셋 등 여러 객체로 초기화할 수 있다

heapq

  • 힙을 활용한 우선순위 큐 기능을 구현할 때 사용

  • 오름차순 정렬의 시간복잡도는 O(NlogN)

  • PriorityQueue 라이브러리가 따로 있지만, heapq가 더 빠르게 동작함

  • heapq.heappush() : 원소 삽입
    heapq.heappop() : 원소 꺼내기

  • 최소힙

    import heapq
    
    def heapsort(iterable):
    		h = []
       result = []
       # 모든 원소를 차례대로 힙에 삽입
       for value in iterable:
       	heapq.heappush(h, value)
       # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
       for i in range(len(h)):
           result.append(heapq.heappop(h))
       return result
       
    result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
    print(result)
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 최대힙
    파이썬에서는 최대 힙을 제공하지 않으므로 아래와 같이 원소의 부호를 임시로 변경해서 사용해야한다.

    import heapq
    
    def heapsort(iterable):
    	 h = []
        result = []
        # 모든 원소를 차례대로 힙에 삽입
        for value in iterable:
        	heapq.heappush(h, -value)
        # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
        for i in range(len(h)):
            result.append(-heapq.heappop(h))
        return result
       
    result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
    print(result)
    # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

bisect

  • 이진탐색을 쉽게 구현 가능
  • '정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적임
  • O(logN)에 정렬된 배열에 맞는 위치를 찾아준다
from bisect import bisect_left, bisect_right

a = [1, 2, 4, 4, 8]
x = 4

print(bisect_left(a, x)) # 2
print(bisect_right(a, x)) # 4

math

  • math.factorial() : 팩토리얼
  • math.sqrt() : 제곱근
  • math.gcd() : 최대공약수
  • math.pi : 파이
  • math.e : 자연상수
profile
둔한 붓이 총명함을 이긴다

0개의 댓글