→ 동일한 기능을 수행하는 알고리즘이 있다면 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다.
Big-O notation
요구사항에 따라 적절한 알고리즘 설계하기
시간제한이 1초인 문제를 만났을 때 일반적인 기준은 다음과 같다
일반적인 알고리즘 문제 해결 과정
지문 읽기 및 컴퓨터적 사고
요구사항(복잡도) 분석
문제 해결을 위한 아이디어 찾기
소스코드 설계 및 코딩
import time
start_titme = time.time() # 측정 종료
# 프로그램 소스코드
end_time = time.time() # 측정 종료
print('time:', end_time - start_time) # 수행시간 출력
리스트를 초기화하는 방법 중 하나
대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화할 수 있다.
array = [i forn i in range(10)]
print(array)
# {0,1,2,3,4,5,6,7,8,9]
array = [ in for i in range(20) if i % 2 == 1]
array = [i * i for i in range(20)]
리스트 컴프리헨션을 2차원 리스트를 초기화할 때 효과적으로 사용됨
특히 N * M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 유용
ex. array = [[0] * m for _ in range(n)]
#리스트에서 특정 값을 가지는 원소를 모두 제거하기
a= [1,2,3,4,5,5,5]
remove_set = {3, 5} # 집합 자료형
#remove_list에 포함되지 않는 값만을 저장
result = [ i for i in a if i not in remove_set]
print(result)
튜플을 사용하면 좋은 경우
자주 사용되는 표준 입력 방법
input() 함수는 한 줄의 문자열을 입력 받는 함수
map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
ex. 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용
list(map(int, input().split()))
ex. 공백을 기준으로 구분된 데이터의 개수가 많지 않다면 다음과 같이 사용
a, b, c = map(int, input().split())
빠르게 입력 받기
파이썬에서 기본 출력은 print() 함수를 이용
print()는 기본적으로 출력 이후에 줄 바꿈을 수행
줄 바꿈을 원치 않는 경우 ‘end’ 속성을 이용 가능
f-string : 중괄호 안에 변수명을 기입하여 간단히 문자열과 정수를 함께 넣을 수 있음
n = int(input())
data = list(map(int, input().split()))
data.sort(reverse=True)
print(data)
#빠르게 입력받기
import sys
data = sys.stdin.readline().rstrip()
print(data)
a = 1
b = 2
print(a, b)
print(7, end=' ')
print(8, end=' ')
answer = 7
print('answer is ' + str(answer) )
#f-string
print(f'answer is {answer}')
리스트 튜플, 문자열, 딕셔너리 모두에서 사용 가능
in 연산자와 not in 연산자 | 설명 |
---|---|
x in 리스트 | 리스트 안에 x가 들어가 있을 때 True |
x not in 문자열 | 문자열 안에 x가 들어가 있지 않을 때 True |
조건문에서 실행될 소스코드가 한 줄인 경우 굳이 줄 바꿈을 하지 않고도 간략하게 표현할 수 있다.
score = 85
if score >= 80: result = 'Success'
else: result = 'Fail'
조건부 표현식(conditional expression) : if ~ else 문을 한 줄에 작성
score = 85
# 만약 score가 80점 이상이면 성공 아니면 실패
result = 'Success' if score >= 80 else 'Fail'
print(result)
순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열
nPr = n (n-1) (n-2) ... (n-r+1)
조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택
nCr = n * (n-1) * (n-2) * ... * (n-r+1) / r!
from itertools import permutations
data = ['A', 'B', 'C']
#모든 순열 구하기
result1 = list(permutations(data, 3))
# 2개를 뽑는 모든 조합 구하기
result2 = list(combinations(data, 2))
from itertools import product
data = ['A', 'B', 'C']
#2개를 뽑는 모든 순열 구하기 (중복 허용)
result = list(product(data, repeat=2))
print(result)
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
#2개를 뽑는 모든 조합 구하기(중복 허용)
result = list(combinations_with_replacement(data, 2))
print(result)