[Python] 코딩 테스트 주요 라이브러리

김찬미·2024년 7월 3일
0

Python

목록 보기
4/7
post-thumbnail

✅ Background

코딩 테스트를 준비하다 보면 라이브러리의 중요성을 깨닫게 된다. 몇 줄의 코드가 단 한 줄의 모듈로 해결되는 경우가 많기 때문이다. 그렇기에 오늘은 Python의 주요 라이브러리, 특히 코딩 테스트에서 자주 쓰이는 모듈들을 정리해 보려고 한다.


내장 라이브러리

1. collections 📚

  • deque: 양방향 큐 자료구조로, 스택 및 큐를 구현할 때 유용하다.

    from collections import deque
    
    dq = deque([1, 2, 3])
    dq.append(4)        # 오른쪽에 추가
    dq.appendleft(0)    # 왼쪽에 추가
    print(dq)           # deque([0, 1, 2, 3, 4])
    dq.pop()            # 오른쪽에서 제거
    dq.popleft()        # 왼쪽에서 제거
    print(dq)           # deque([1, 2, 3])
  • Counter: 요소의 개수를 셀 때 유용하다. 주로 문자열 내 문자 빈도 계산, 리스트 내 요소 빈도 계산 등에 사용된다.

    from collections import Counter
    
    cnt = Counter(['a', 'b', 'c', 'a', 'b', 'b'])
    print(cnt)          # Counter({'b': 3, 'a': 2, 'c': 1})
    print(cnt['a'])     # 2
    print(cnt.most_common(2))  # [('b', 3), ('a', 2)]
  • defaultdict: 기본 값을 제공하는 딕셔너리로, 키가 없는 경우 기본 값을 반환한다. 주로 그래프 문제나 딕셔너리 초기화에 사용된다.

    from collections import defaultdict
    
    dd = defaultdict(int)
    dd['a'] += 1
    print(dd)  # defaultdict(<class 'int'>, {'a': 1})
  • namedtuple: 이름이 있는 필드를 가진 튜플로, 읽기 쉬운 코드 작성에 유리하다. 주로 데이터 객체를 단순하게 표현할 때 사용된다.

    from collections import namedtuple
    
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(11, y=22)
    print(p.x, p.y)  # 11 22

2. itertools 🔄

  • combinations: 주어진 길이의 조합을 생성한다. 주로 부분 집합 문제나 조합 계산에 사용된다..

    from itertools import combinations
    
    comb = combinations([1, 2, 3], 2)
    print(list(comb))  # [(1, 2), (1, 3), (2, 3)]
  • permutations: 주어진 길이의 순열을 생성한다. 순열 계산 문제에 유용하다.

    from itertools import permutations
    
    perm = permutations([1, 2, 3], 2)
    print(list(perm))  # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
  • product: 카테시안 곱을 반환한다. 여러 리스트의 모든 조합을 구할 때 사용된다.

    from itertools import product
    
    prod = product([1, 2], ['a', 'b'])
    print(list(prod))  # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
  • combinations_with_replacement: 중복 조합을 생성한다.

    from itertools import combinations_with_replacement
    
    comb_wr = combinations_with_replacement([1, 2, 3], 2)
    print(list(comb_wr))  # [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

3. heapq ⛏️

  • heappush: 힙에 원소를 추가한다. 주로 우선순위 큐 구현에 사용된다.

  • heappop: 힙에서 원소를 제거하고 반환한다.

  • heapify: 리스트를 힙으로 변환한다.

    import heapq
    
    heap = []
    heapq.heappush(heap, 4)
    heapq.heappush(heap, 1)
    heapq.heappush(heap, 7)
    print(heap)  # [1, 4, 7]
    print(heapq.heappop(heap))  # 1
    print(heap)  # [4, 7]

4. bisect 🔍

  • bisect_left: 정렬된 리스트에 값을 삽입할 위치를 반환 (왼쪽 기준), 주로 이진 탐색 구현에 사용된다.

  • bisect_right: 정렬된 리스트에 값을 삽입할 위치를 반환 (오른쪽 기준)

  • insort_left: 값을 삽입하고 정렬된 상태를 유지 (왼쪽 기준)

  • insort_right: 값을 삽입하고 정렬된 상태를 유지 (오른쪽 기준)

    import bisect
    
    lst = [1, 2, 4, 5]
    bisect.insort_left(lst, 3)
    print(lst)  # [1, 2, 3, 4, 5]

5. math 🔢

  • gcd: 최대 공약수 계산

  • factorial: 팩토리얼 계산

  • sqrt: 제곱근 계산

  • ceil / floor: 올림 / 내림

    import math
    
    print(math.gcd(60, 48))  # 12
    print(math.factorial(5))  # 120
    print(math.sqrt(16))  # 4.0
    print(math.ceil(4.2))  # 5
    print(math.floor(4.8))  # 4

6. functools 🔗

  • reduce(function, iterable): 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용

    from functools import reduce
    
    # reduce(집계 함수, 순회 가능한 데이터[, 초기값])
    
    # 리스트의 모든 요소를 합산
    result = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
    print(result)  # 15
    
    # 리스트의 모든 요소를 곱셈
    result = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])
    print(result)  # 120

외부 라이브러리

일반적으로 코딩 테스트는 기본적인 문법과 내장 라이브러리의 활용을 다룬다. 따라서 외부 라이브러리를 전부 알 필요는 없지만, 몇 가지 외부 라이브러리들은 특정 문제를 해결할 때 매우 유용할 수 있으니 한 번 훑고 지나가는 것을 추천한다.

1. numpy 🧮

  • 다차원 배열 객체와 고수준의 수학 함수를 제공한다. 주로 배열 및 행렬 연산에 사용된다.

    import numpy as np
    
    arr = np.array([1, 2, 3])
    print(arr + 1)  # [2 3 4]

2. networkx 🌐

  • 복잡한 네트워크 그래프 분석에 사용된다. 그래프 이론 및 알고리즘 구현에 유용하다.

    import networkx as nx
    
    G = nx.Graph()
    G.add_edge(1, 2)
    G.add_edge(2, 3)
    print(nx.shortest_path(G, 1, 3))  # [1, 2, 3]

3. sympy ✏️

  • 심볼릭 수학을 위한 라이브러리로, 대수 방정식 풀이, 미적분 계산 등에 사용된다.

    from sympy import symbols, solve
    
    x = symbols('x')
    equation = x**2 - 4
    solution = solve(e

Python 문법?

이 글에서는 라이브러리에 대해 다루고 있지만, 혹시 문법에 대해 공부하고 싶다면 [Python] 코딩 테스트 필수 문법 글을 참고하자!

profile
백엔드 지망 학부생

0개의 댓글