소수부가 0일 때 0을 생략
a = 5.
실수형 데이터를 표현하는 방식으로 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다.
1e9 : 1,000,000,000 (10억)
유효숫자e^지수 = 유효숫자 x 10^지수
컴퓨터가 실수를 정확히 표현하지 못한다
round(a,b)
나누기 연산 /
: 나눠진 결과를 기본적으로 실수형으로 처리한다.
몫 연산 //
: 나눈 결과에서 몫
제곱 **
: 제곱
Python List는 C++ STL vector와 유사하다.
n = 10
a = [0] * n
print(a)
인덱싱 : 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것
n[a:b] : a부터 b-1까지
2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 한다.
# 0부터 19에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]
# N X M 크기의 2차원 리스트 초기화
n = 2, m = 3
array = [[0] * m for _ in range(n)]
append()
sort()
reverse()
insert()
count()
remove()
remove 특정 원소 하나씩 제거
a = [1,2,3,4,5]
remove_set = {3,5}
# remove_set에 포함되지 않은 값만 저장
result = [i for i in a if i not in remove_set]
print(result)
key()s : key 데이터만 뽑아서 리스트로 이용
values() : 값 데이터만을 뽑아서 리스트로 이용
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
# 키 데이터만 담은 리스트
key_list = data.keys()
# 값 데이터만 담은 리스트
value_list = data.values()
중복을 허용하지 않는다.
순서가 없다.
값 데이터만 담게 된다.
시간 복잡도 : 빅오(1)
data = set([1,2,3,4,5])
data = {1,2,3,4,5}
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
print(a | b) # 합집합
print(a & b) # 교집합
print(a - b) # 차집합
add() : 하나의 집합 데이터에 값을 추가할 때 사용
update() : 여러 개의 값을 한꺼번에 추가하고자 할 때 사용
remove() : 특정한 값을 제거할 때 사용
이때 시간 복잡도가 빅오(1)이다.
파이썬에서 들여쓰기 : 스페이스 바를 4번 입력하여 작성한다.
X and Y : X와 Y가 모두 참일 때 참이다.
X or Y : X와 Y 중에 하나만 참이어도 참이다.
not X : X가 거짓(False)일 때 참이다.
X in 리스트 : 리스트 안에 X가 들어가 있을 때 참이다.
X not in 문자열 : 문자열 안에 X가 들어가 있지 않을 때 참이다.
pass문을 이용한다.
for 변수 in 리스트:
실행할 소스코드
global 키워드 : 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.
람다 표현식
함수를 매우 간단하게 작성하여 적용할 수 있다.
람다식은 파이썬의 정렬 라이브러리를 사용할 때, 정렬 기준(Key)을 설정할 때에도 자주 사용된다.
def add(a, b):
return a + b
# 일반적인 add() 메서드 사용
print(add(3, 7))
# 람다 표현식으로 구현한 add() 메서드
print((lambda a, b: a + b)(3, 7))
input() : 한 줄의 문자열을 입력 받도록 해준다.
list(map(int, input().split())) : 여러 개의 데이터를 입력받을 때 데이터가 공백으로 구분되는 경우, 입력받은 문자열을 띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저장하는 코드, 공백 혹은 줄 바꿈을 기준으로 데이터를 구분할 때 많이 사용
input(): 입력받은 문자열을
split() : 공백으로 나눈 리스트로 바꾼 뒤
map(int, ) : 해당 리스트의 모든 원소에 int() 함수를 적용한다.
list() : 최종적으로 그 결과를 list()로 다시 바꿈으로써 입력받은 문자열을 띄어쓰기로 구분하여 각각 숫자 자료형으로 저장하게 되는 것이다.
int(input()) : 줄 바꿈일 때 사용
n = int(input())
data = list(map(int, input().split()))
data.sort(reverse = True)
print(data)
입력을 최대한 빠르게 받아야 하는 경우
sys 라이브러리 : 파이썬의 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 함수를 이용한다, sys 라이브러리는 input() 함수와 같이 한 줄씩 입력받기 위해 사용한다.
import sys
data = sys.stdin.readline().rstrip()
sys 라이브러리를 사용할 때는 한 줄 입력을 받고 나서 rstrip() 함수를 꼭 호출해야 한다.
readline() : 입력시 엔터가 줄 바꿈 기호로 입력
rstrip() : 공백 문자를 제거
print()
,로 구분할 경우 : 각 변수가 띄어쓰기로 구분되어 출력
연산자(+)를 이용할 시 : 문자열과 수를 함께 출력해야 되는 경우
answer = 7
print("정답은 "+str(answer)+"입니다.")
print("정답은 ", answer, "입니다.")
print(f"정답은 {answer}입니다.")
표준 라이브러리 : 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리이다.
print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리이다. 파이썬 프로그램을 작성할 때 없어서는 안 되는 필수적인 기능을 포함하고 있다.
sum() : 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환
min() : 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환
max() : 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환
eval() : 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환
sorted() : iterable 객체가 들어왔을 때, 정렬된 결과를 반환
파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리이다. 순열과 조합 라이브러리를 제공한다.
permutations
from itertools import permutations
data = ['A','B','C'] # 데이터 준비
result = list(permutations(data, 3)) # 모든 순열 구하기
print(result)
# [('A','B','C'),('A','C','B'), ~ , ('C','B','A')]
combinations
from itertools import combinationsdata = ['A','B','C'] # 데이터 준비result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기print(result)
product
from itertools import product
data = ['A','B','C'] # 데이터 준비
result = list(product(data, repeat=2)) # 2개를 봅는 모든 순열 구하기(중복 허용)
print(result)
[('A','A'),('A','B'),('A','C'),('B','A'), ~ ,('C','C')]
combinations_with_replacement
from itertools import combinations_with_replacement
data = ['A','B','C'] # 데이터 준비
result = list(combinations_with_replacement(data,2)) # 2개를 뽑는 모든 조합 구하기(중복 허용)
print(result)
# 결과
[('A','A'),('A','B'),('A','C'),('B','B'),('B','C'),('C','C')]
힙(Heap) 기능을 제공하는 라이브러리이다. 우선순위 큐 기능을 구현하기 위해 사용한다.
다익스트라 최단 경로 알고리즘을 포함해 다양한 알고리즘에서 우선순위 큐 기능을 구현하고자 할 때 사용한다.
최소 힙으로 구성되어 있으므로 단순히 원소를 힙에 전부 넣었다가 빼는 것만으로도 시간복잡도 빅오(NlogN)에 오름차순 정렬이 완료된다.
보통 최소 힙 자료구조의 최상단 원소는 '가장 작은' 원소이기 때문이다.
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))
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 solution(food_times, k):
if sum(food_times) <= k:
return - 1
q = []
for i in range(len(food_times)):
# (음식 시간, 음식 번호) 형태로 우선순위 큐에 삽입
heapq.heappush(q, (food_times[i], i + 1))
print(q[0][0]) # 1
print(q[0][1]) # 3
print(q[1][0]) # 9
print(q[1][1]) # 1
print(heapq.heappop(q)[0]) # 1
print(heapq.heappop(q)[0]) # 2
print(heapq.heappop(q)[0]) # 9
solution([9,2,1],5)
import heapq
def solution(food_times, k):
if sum(food_times) <= k:
return - 1
print(food_times)
p = []
for i in range(len(food_times)):
# (음식 시간, 음식 번호) 형태로 우선순위 큐에 삽입
heapq.heappush(p, -food_times[i])
for i in range(len(food_times)):
# (음식 시간, 음식 번호) 형태로 우선순위 큐에 삽입
print(heapq.heappop(p), end =' ')
solution([4,5,3,1,2],5)
# 결과
# -5 -4 -3 -2 -1
파이썬에서는 최대 힙을 제공하지 않는다.
원소의 부호를 임시로 변경하는 방식을 사용
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, -value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(-heappq.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]
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))
# 결과
# 2
# 4
count_by_range(a, left_value, right_value)
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_index - left_index
# 리스트 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
# 값이 4인 데이터 개수 출력
print(count_by_range(a,4,4))
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3))
# 결과
# 2
# 6
덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리이다.
파이썬에서는 deque를 사용해 큐를 구현한다.
deque
from collections import deque
data = deque([2,3,4])
data.appendleft(1)
data.append(5)
print(data)
print(list(data)) # 리스트 자료형으로 변환
# 결과
# deque([1,2,3,4,5])
# [1,2,3,4,5]
from collections import Counter
counter = Counter(['red','blue','red','green','blue','blue'])
print(counter['blue']) # 'blue'가 등장한 횟수 출력
print(counter['green']) # 'green'이 등장한 횟수 출력
print(dict(counter)) # 사전 자료형으로 변환
# 결과
# 3
# 1
# {'red': 2, 'blue': 3, 'green': 1}
import math
print(math.factorial(5)) # 5 팩토리얼을 출력
# 결과
# 120
print(math.sqrt(7)) # 7의 제곱근을 출력
# 결과
# 2.6457513110645907
print(math.gcd(21, 14)) # 최대 공약수
# 결과
# 7
print(math.pi) # 파이(pi) 출력
print(math.e) # 자연상수 e 출력
# 결과
# 3.141592653589793
# 2.718281828459045
참고 자료