본 포스팅은 (이코테 2021) 이것이 취업을 위한 코딩 테스트다 with 파이썬을 참고하여 공부하고 정리한 글임을 밝힙니다.
단순히 소스코드가 복잡해 보이는 것(이해하기에 복잡해보인다)과는 다름!, 성능적인 측면에서 복잡도를 말함
가장 빠르게 증가하는 항만을 고려하는 표기법
- 함수의 상한만을 나타내게 됨
ex) 연산 횟수: ➡️ 빅오 표기법에선 차수가 가장 큰 항만 남기므로 으로 표현됨 (계수도 무시)
빅오 표기법 순위 (밑으로 내려갈수록 나쁨)
1) N개의 데이터의 합을 계산하는 프로그램 예제
array = [3, 5, 1, 2, 4] # 5개의 데이터(N=5)
summary = 0 # 합계를 저장할 변수
# 모든 데이터를 하나씩 확인하여 합계 계산 (복잡도 영향 받는 부분)
for x in array:
summary += x
# 결과 출력
print(summary)
수행 시간은 데이터의 개수 N에 비례할 것임을 예측 가능(모든 데이터 하나씩 확인하며 합계) ➡️ 시간 복잡도:
- N이 10만, 100만 늘어날수록 선형으로 비례하여 복잡도가 증가하겠지
2) 2중 반복문을 이용하는 프로그램 예제
array = [3, 5, 1, 2, 4] # 5개의 데이터(N=5)
for i in array:
for j in array:
temp = i * j # 5x5 = 5^2
print(temp
import time # 표준 라이브러리
start_time = time.time() # 측정 시작
# 프로그램 소스코드
end_time = time.time() # 측정 종료
print("time:", end_time - start_time) # 수행 시간 출력
array=[[0]*m for _ in range(n)]
array = [[0]*m] * n
변수명.append()
: 변수명.sort()
: 변수명.reverse()
:리스트의 원소 순서를 모두 뒤집음, 변수명.insert()
: 변수명.count()
: 변수명.remove()
: a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
# remove_list에 포함되지 않은 값만을 저장
result = [i for i in if i not in remove_list]
print(result)
(비용, 노드 번호)
의 형태로 자주 사용set()
함수 이용하여 리스트 혹은 문자열 이용해서 초기화 가능 # 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5])
# 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}
데이터 조회 및 수정:
합집합: a|b
, 교집합: a&b
, 차집합: a-b
집합 자료형 관련 함수
.add(4)
: 새로운 원소 추가.update([5,6])
: 새로운 원소 여러개 추가.remove(3)
: 특정 값을 갖는 원소 삭제sys
라이브러리에 정의되어 있는 sys.stdin.readline()
메서드 이용rstrip()
메서드 함께 사용 (줄 바꿈 기호(\n) 제거)import sys
data = sys.stdin.readline().rstrip()
answer = 7
print(f"정답은 {answer} 입니다.")
score = 85
if score >= 80: result = "Success"
else: result = "Fail"
score = 85
result = "Success" if score >= 80 else "Fail"
print(result)
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
def my_key(x): # key 변수에 정렬 기준 함수 명시
return x[1]
# key를 기준으로 정렬
# 1.
print(sorted(array, key=my_key))
# 2.
print(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))
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)) # 모든 조합 구하기
print(result)
# 중복 순열
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기 (중복 허용)
print(result)
# 중복 조합
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, repeat=2)) # 2개를 뽑는 모든 조합 구하기 (중복 허용)
print(result)
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue')]
print(counter['blue']) # 'blue'가 등장한 횟수 출력
print(counter['green']) # 'green'가 등장한 횟수 출력
print(dict(counter)) # 사전 자료형으로 반환
math
라이브러리의 gcd()
함수 이용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) 계산