Python, C++, Java
낮을수록 좋음
빅오표기법 - 가장 영향이 큰 항만 고려한다
(좋음) O(1) O(logN) O(N) O(NlogN) O(N²) O(N³) O(2ⁿ) (나쁨)
상수 로그 선형 로그선형 이차 삼차 지수
N < 500 : O(N³)
N < 2,000 : O(N²)
N < 100,000 : O(NlogN)
N < 10,000,000 : O(N)
인 알고리즘을 설계하면 문제를 풀 수 있다
import time
start_time = time.time() # 측정 시작
# 프로그램 소스코드
end_time = time.time() # 측정 종료
print("time:", end_time - start_time) # 수행 시간 출력
반올림 함수인 round() 이용
round(123.456, 2) -> 123.46
arr = [ i for i in range(10) ] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = [ i for i in range(20) if i%2 == 1 ] = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
arr = [ i*i for i in range(1,10) ] = [1, 4, 9, 16, 25, 36, 49, 64, 81]
# 2차원 리스트를 초기화 할 때 효과적이다.
arr = [ [0]*m for _ in range(n) ] (n행, m열의 리스트 생성)
( 잘못된 예시: arr = [[0]*m] * 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 ] # remove_set에 들어있지 않은 것들만 새로 저장한다. == 3, 5 제거
print(result)
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
# Key: '사과', Value: 'Apple'
b = {
'홍길동': 97,
'이순신': 98
}
print(b) # {'홍길동': 97, '이순신': 98}
print(b['이순신']) # 98
key_list = list(b.keys())
print(key_list) # ['홍길동','이순신']
# list를 set으로 하여 초기화
data = set([1,1,2,3,4,4,5])
print(data) # {1, 2, 3, 4, 5}
# 바로 초기화
data = {1,1,2,3,4,4,5}
print(data) # {1, 2, 3, 4, 5}
answer = 7
print(f"정답은 {answer}입니다.")
if ~ elif ~ else 형태가 기본.
score = 85
if score >= 80: result = "Success" # 줄바꿈을 하지 않아도 됨
else: result = "Fail"
score = 85
result = "Success" if score >= 80 else "Fail" # 한 줄에 작성할 때, if문이 중간에 들어감에 주의
print(result) # Success
(이외 설명은 잘 알고 있어서 생략.)
특정한 작업을 하나의 단위로 묶어 놓은 것 -> 중복을 줄일 수 있다.
def 함수명(매개변수): # 매개변수: 함수 내부에서 사용할 변수
실행할 소스코드
return 반환값 # 반환값: 함수에서 처리된 결과를 반환
def add(a,b):
return a+b
print(add(3,7))
def add(a,b):
print('함수의 결과:', a+b)
add(3,7)
def add(a,b):
print('함수의 결과:', a+b)
add(b=3, a=7)
global 키워드
global 키워드로 변수를 지정하면
해당 함수에서는 지역변수를 만들지 않고
함수 밖에 선언된 변수를 바로 참조하게 된다.
배열은 global 키워드 없이 바로 참조가 가능하다.
그러나 전역변수의 값을 변경하고자 한다면
global 키워드를 사용하여 값을 변경할 수 있다.
함수 내부와 외부에 같은 이름의 변수가 선언된다면,
함수 내부의 지역변수를 우선한다.
파이썬에서 함수는 여러 개의 반환값을 가질 수 있다.
def operator(a,b):
add_var = a+b
subtract_var = a-b
multiply_var = a*b
divide_var = a/b
return add_var, subtract_var, multiply_var, divide_var # 패킹: 여러 개의 변수가 한 번에 반환되는 것
a,b,c,d = operator(7,3) # 언패킹: 반환된 값들을 차례대로 특정 변수에 저장하는 것
print(a,b,c,d)
함수를 간단하게 작성할 수 있다.
특정한 기능을 수행하는 함수를 한 줄에 작성활 수 있다는 점이 특징이다.
print((lambda a, b: a+b)(3, 7))
함수의 기능이 간단하거나, 한 번 사용하고 말 경우에 유용하게 쓸 수 있다.
arr = [('홍길동', 50),('이순신', 32),('아무개', 74)]
def my_key(x):
return x[1] # index가 1이므로 두번째 원소를 기준으로 정렬하도록 함
print(sorted(arr, key=my_key)) # sorted함수는 key=에 함수를 넣어서, 정렬 기준을 명시해 줄 수 있다.
print(sorted(arr, key=lambda x: x[1])) # 정렬은 한 번 사용하고 말기에 lambda 함수로 간편히 표현할 수 있다.
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]
result = map(lambda a,b: a+b, list1, list2) # list1, list2의 원소들이 하나씩 순서대로 더해진다.
print(list(result)) # [7,9,11,13,15]
from itertools import permutations
data = ['A','B','C']
result = list(permutations(data, 3)) # 모든 순열 구하기
print(result)
from itertools import combinations
data = ['A','B','C']
result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result)
import math
# 최소 공배수(LCM)를 구하는 함수
def lcm(a,b):
return a*b//math.gcd(a,b) # 최소 공배수 = 두 수의 곱 // 최대 공약수
a, b = 21, 14
print(math.gcd(21, 14)) # 최대 공약수(GCD) 계산 7
print(lcm(21, 14)) # 최소 공배수(LCM) 계산 42
from collections import Counter
counter = Counter(['red','blue','red','green','blue','blue'])
print(counter['blue']) # 'blue'가 등장한 횟수 출력 # 3
print(counter['green']) # 'green'이 등장한 횟수 출력 # 1
print(dict(counter)) # 사전 자료형으로 반환 #{'red': 2, 'blue': 3, 'green': 1}