-
파이썬 문법algorithm/이것이 취업을 위한 코딩테스트다 2023. 8. 24. 14:35
리스트 컴프리헨션
# 0부터 9까지의 수를 포함하는 리스트 array = [i for i in range(10)] # 0부터 19까지의 수 중에서 홀수만 포함하는 리스트 array = [i for i in range(20) if i % 2 == 1] # 1부터 9까지의 수들의 제곱 값을 포함하는 리스트 array = [i * i for i in range(1, 10)]
so-리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.
- 특히 N x M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용하다.
ㆍ좋은 예시 : array = [[0] * m for _ in range(n)]
- 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않은 결과가 나올 수 있다.
ㆍ잘못된 예시 : array = [[0] * m] * n
ㆍ위 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식된다.
리스트 관련 기타 메서드
함수명 사용법 시간 복잡도 append() 변수명.append() O(1) sort() 변수명.sort() O(NlogN) 변수명.sort(reverse = True) reverse() 변수명.reverse O(N) insert() insert(삽입할 위치 인덱스, 삽입할 값) O(N) count() 변수명.count(특정 값) O(N) remove() 변수명.remove(특정 값) O(N) 리스트에서 특정 값을 가지는 원소를 모두 제거하기
a = [1,2,3,4,5,5,5] remove_set = {3,5} result = [i for i in a if i not in remove_set]
튜플을 사용하면 좋은 경우
- 서로 다른 성질의 데이터를 묶어서 관리해야 할 때
ㆍ최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용
- 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때
ㆍ튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.
- 리스트보다 메모리를 효율적으로 사용해야 할 때
사전 자료형
- 파이썬의 사전 자료형은 해시 테이블(Hash Table)를 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다
집합 자료형
- 특징 : 중복 허용 X, 순서가 없다.
- 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.
빠르게 입력 받기
import sys data = sys.stdin.readline().rstrip()
global 키워드
- global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.
a = 0 def func(): global a a += 1 for i in range(10): func() print(a) # 10
- 리스트의 경우 오류없이 수행 가능
array = [1,2,3,4,5] def func(): array.append(6) # [1,2,3,4,5,6]
람다 표현식 예시
- 내장 함수에서 사용
sorted(array, key=lambda x: x[1])
- 여러 개의 리스트에 적용
list1 = [1,2,3,4,5] list2 = [6,7,8,9,10] result = map(lambda a,b: a+b, list1, list2) print(list(result)) # [7,9,11,13,15]
실전에서 유용한 표준라이브러리
- 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공한다.
- itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들 제공
ㆍ특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용
- heapq : 힙(Heap) 자료구조를 제공한다.
ㆍ일반적으로 우선순위 큐 기능을 구현하기 위해 사용 - 다익스트라 최단 경로 문제
- bisect : 이진 탐색(Binary Search) 기능을 제공
- collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함한다.
- math : 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함
순열과 조합
- 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것 (순서고려)
ㆍnPr = n * (n - 1) * (n - 2) * ... * (n - r + 1)
from itertools import permutations data = ['A', 'B', 'C'] result = list(permutations(data, 3)) # 모든 순열 구하기
- 조합 : 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것
ㆍnCr = ( n * (n - 1) * (n - 2) * ... * (n - r + 1) ) / r!
from itertools import combinations data = ['A','B','C'] result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합
- 중복 순열
from itertools import product data = ['A','B','C'] result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기(중복허용)
- 중복 조합
from itertools import combinations_with_replacement data = ['A','B','C'] result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 조합 구하기(중복 허용)
Counter
- 리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려준다.
from collections import Counter counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue']) print(counter['blue']) print(counter['green']) print(dict(counter))
최대 공약수와 최소 공배수
import math # 최소 공배수(LCM)를 구하는 함수 def lcm(a,b): return a * b // math.gcd(a,b) a = 21 b = 14 print(math.gcd(21, 14)) # 최대공약수(GCD) 계산 print(lcm(21,14)) # 최소공배수(LCM) 계산
'algorithm > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
코테 정리 및 공부 (0) 2023.09.11 PART04 - APPENDIX B 기타 알고리즘 (0) 2023.08.23 PART02 - CHAPTER 10. 그래프 이론 (0) 2023.03.26 PART02 - CHAPTER 09. 최단 경로 (0) 2023.03.26 PART02 - CHAPTER 08. 다이나믹 프로그래밍 (0) 2023.03.26