이코테-부록 A-주요 라이브러리 문법

cosmos·2022년 3월 28일
0
post-thumbnail

표준 라이브러리란

정의 & 특징

  • 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리를 의미.
  • 코딩 테스트를 위해 반드시 알아야 하는 라이브러리는 대략 6가지 정도이며 아래와 같다.
  1. 내장 함수: 기본 내장 라이브러리이다.
  2. itertools: python에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리이다. 순열과 조합 라이브러리를 제공한다.
  3. heapq: 힙 기능을 제공하는 라이브러리이다. 우선순위 큐 기능을 구현하기 위해 사용된다.
  4. bisect: 이진 탐색(binary search) 기능을 제공하는 라이브러리이다.
  5. collections: 덱(deque), 카운터(counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리이다.
  6. math: 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이와 같은 상수를 포함하고 있다.

itertools

  • 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
  • 코딩 테스트에서 가장 유용하게 쓰이는 클래스는 permutations, combinations이다.

itertools: permutations

  • 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산한다.
  • permutations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

permutations 예시 소스코드

from itertools import permutations

data = ['A', 'B', 'C']

# 리스트에서 3개를 뽑아 나열하는 모든 경우를 출력
result = list(permutations(data, 3))

print(result)

itertools: combinations

  • 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)을 계산.
  • combinations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

combinations 예시 소스코드

from itertools import combinations

data = ['a', 'b', 'c']

# 리스트에서 2개를 뽑아 순서에 상관없이 나열하는 모든 경우를 출력
result = list(combinations(data, 2))

print(result)

itertools: product

  • 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산한다.
  • 다만, 원소를 중복하여 뽑는다.
  • product 객체를 초기화할 때는 뽑고자 하는 데이터의 수를 repeat 속성값으로 넣어준다.
  • product는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

product 예시 소스코드

from itertools import product

data = ['a', 'b', 'c']

# 리스트에서 중복을 포함하여 2개를 뽑아 나열하는 모든 경우를 출력
result = list(product(data, repeat=2))

print(result)

bisect

  • 이진 탐색을 쉽게 구현할 수 있도록 bisect 라이브러리를 제공.
  • 정렬된 배열에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용
  • bisect_left()와 bisect_right()가 핵심 함수이며 O(logN)에 작동함.
  • bisect_left(a, x): 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
  • bisect_right(a, x): 정렬된 순서를 유지하도록 리스트 a에 데이터 x를 삽입할 때 가장 오른쪽 인덱스를 찾는 메서드
  • 정렬된 리스트에서 값이 특정 범위에 속하는 원소의 개수를 구하고자 할 때, 효과적으로 사용할 수 있다.
bisect 예시 소스코드
from bisect import bisect_left, bisect_right

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

print(bisect_left(a, x))
print(bisect_right(a, x))

bisect 예시 소스코드 2

from bisect import bisect_left, bisect_right

# 값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
    right_index = bisect_right(a, right_value)
    left_index = bisect_left(a, left_value)
    
    return right_value - left_value

# 리스트 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]

# 값이 4인 데이터 개수 출력
print(count_by_range(a, 4, 4))  # 2

# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3))  # 6

collections

  • 코딩 테스트에서는 dequecounter가 핵심으로 쓰인다.

collections: counter

  • 등장 횟수를 세는 기능을 제공
  • 리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지를 알려준다.

counter 예시 소스코드

from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue'])  # blue가 등장한 횟수 출력 -> 3
print(dict[counter])    # 사전 자료형으로 변환 -> {'red': 2, 'blue':3, 'green': 1}

출처 & 깃허브

이것이 취업을 위한 코딩 테스트다 with python

github

0개의 댓글

관련 채용 정보