알고리즘
파이썬 기본 문법 복습
leeeee.yeon
2021. 6. 18. 16:27
'이것이 취업을 위한 코딩 테스트다' 참고
리스트 컴프리헨션
arr = [i for i in range(20) if i % 2 == 1]
print(arr)
// [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
언더바(_)의 역할
for _ in range(5):
print("Hello World")
반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용
N*M 크기의 2차원 리스트 초기화
n = 3
m = 4
arr = [[0]*m for _ in range(n)]
// [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
리스트 관련 메서드
- append()
- sort()
- reverse()
- insert() - 시간 복잡도 O(N), 동작이 느리므로 남발하면 '시간 초과'로 테스트를 통과하지 못할 수 있음
- count()
- remove() - 시간 복잡도 O(N)
튜플
- 한 번 선언된 값 변경 불가
- 소괄호 이용
- 그래프 알고리즘 구현할 때 자주 사용
사전 자료형
- 키와 값의 쌍을 데이터로 가지는 자료형
- 리스트보다 훨씬 빠르게 동작
data = dict ()
- 위와 같은 방법으로 사전 초기화
- keys() 함수, values() 함수
집합 자료형
- 중복을 허락하지 않는다.
- 순서가 없다.
- 초기화 - set() 함수, 중괄호( { } )
- 합집합 ' | ' / 교집합 '&' / 차집합 '-'
- add() - 하나의 데이터 추가
- update() - 여러 개의 값 한번에 추가
- remove() - 특정한 값 제거
- if ~ elif ~ else 문
- 논리 연산자: and, or, not
- in 연산자, not in 연산자
- 아무것도 처리하고 싶지 않을 때 pass문
- range(시작 값, 끝 값+1)
- 함수 안에서 함수 밖의 변수 데이터 변경해야 하는 경우: 함수에서 global 키워드 이용
- 람다 표현식
- data = list(map(int, input().split()))
import sys
sys.stdin.readline().rstrip()
- input()이 느릴 때 사용
-
answer = 7 print(f"정답은 {answer}입니다.") // 정답은 7입니다.
중요 라이브러리들
- 내장 라이브러리
- sum(), max(), min(), eval(), sorted()
- itertools - 순열, 조합 라이브러리 제공
- permutations() - 순열
- combinations() - 조합
- product() - 중복을 허용한 순열
- combinations_with_replacement() - 순서를 고려하지 않는 조합
- -- 여기부터는 공부하면서 나중에 추가하자 --
- heapq - 힙 기능 제공, 우선순위 큐 기능을 구현하기 위해 사용
- bisect - 이진 탐색 기능 제공
- collections - 덱, 카운터 등 유용한 자료구조 포함
- deque - 큐를 구현
- 인덱싱, 슬라이싱 기능 사용할 수 없음
- 첫 번째 원소 제거, 삽입 - popleft(), appendleft(x)
- 마지막 원소 제거, 삽입 - append(x), pop()
리스트 | deque | |
가장 앞쪽에 원소 추가 | O(N) | O(1) |
가장 뒤쪽에 원소 추가 | O(1) | O(1) |
가장 앞쪽에 있는 원소 제거 | O(N) | O(1) |
가장 뒤쪽에 있는 원소 제거 | O(1) | O(1) |
- (collections 라이브러리 이어서)
- Counter - 등장 횟수를 세는 기능 제공
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue'])
print(counter['green'])
print(dict(counter))
'''
3
1
{'red': 2, 'blue': 3, 'green': 1}
'''
- math
- factorial()
- sqrt()
- gcd()
여유가 있으면 자신만의 라이브러리 (팀 노트)를 만들자