[이것이 취업을 위한 코딩 테스트다 with 파이썬] 1-1강(수 자료형, 리스트 자료형)
2021. 4. 27. 00:14ㆍ민공지능/알고리즘
* 유튜브를 보고 정리한 내용입니다.
시간 복잡도를 표현할 때는 빅오(Big-O) 표기법을 사용한다.
N개의 데이터의 합을 계산하는 프로그램 예제
array = [3,5,1,2,4] # 5개의 데이터(N=5)
# array 변수에 리스트 객체 할당
summary = 0 # 합계를 저장할 변수
# 모든 데이터를 하나씩 확인하며 합계를 계산
for x in array:
summary += x
# 결과 출력
print(summary)
# 15
수행 시간은 데이터의 개수 N에 비례할 것임을 예측할 수 있다.
시간 복잡도 : O(N)
a = 5
b = 7
print(a+b)
# 상수 연산이므로 시간 복잡도는 O(1)로 표현할 수 있다.
2중 반복문 예제
array = [3,5,1,2,4]
for i in array:
for j in array:
temp = i * j
# 5 * 5 = 5**
print(temp)
시간 복잡도 : O(N**)
모든 2중 반복문의 시간 복잡도가 O(N**)은 아니다.
소스코드가 내부적으로 다른 함수를 호출한다면 내부 함수의 시간 복잡도까지 고려해야 한다.
수행 시간 측정 소스 코드 예제
import time
start_time = time.time() # 시간 측정 시작
##
## 프로그램 소스 코드
##
end_time = time.time() # 시간 측정 종료
print("time : ", end_time - start_time) # 수행 시간 출력
# 양의 정수
a = 100
print(a)
# 100
a = a + 5
print(a)
# 105
# 음의 정수
a = -7
print(a)
# -7
# 0
a = 0
print(a)
# 0
a = 1e9
print(a)
# 1000000000.0
a = 75.25e1
print(a)
# 752.5
a = 3954e-3
print(a)
# 3.954
------------------------------------------------------
# 정수형 데이터로 표현하고 싶다면 내장함수인 int를 이용해서
# 실수형 데이터를 정수형 데이터로 바꿔준다.
a = int(1e9)
print(a)
# 1000000000
a = 0.3 + 0.6
print(round(a, 4))
if round(a,4)==0.9:
print(True)
else :
print(False)
# 0.9
# True
유사한 성질을 가진 데이터가 연속적으로 담겨야 할 때 많이 사용한다는 점에서 테이블이라고 부르기도 한다.
일상적으로 1부터 시작하지만 리스트의 인덱스는 0부터 시작한다.
# 직접 데이터를 넣어 초기화
a = [1,2,3,4,5,6,7,8,9]
print(a)
# [1,2,3,4,5,6,7,8,9]
# 네 번째 원소만 출력
print(a[3])
# 4
# 원소 값 바꾸기
a[4] = 4
print(a)
# [1,2,3,4,4,6,7,8,9]
# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)
# [0,0,0,0,0,0,0,0,0,0]
a = [1,2,3,4,5,6,7,8,9]
# 네 번째 원소만 출력
print(a[3])
# 4
# 두 번째 원소부터 네 번째 원소까지
print(a[1:4])
# [2,3,4]
# 0부터 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
# for i in range에서 i가 0부터 10까지 반복될 수 있도록 하되,
# i의 값이 차례대로 리스트에 담길 수 있도록 앞에 i를 넣어준다
print(array)
# [0,1,2,3,4,5,6,7,8,9]
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1] # 2로 나눈 나머지가 1일 경우
print(array)
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# 위와 동일한 일반적인 코드
array = []
for i in range(20):
if i % 2 ==1:
array.append(i)
print(array)
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1,10)]
print(array)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
< 좋은 예시 >
<잘못된 예시>
원래 O표시된 부분을 바꾸고 싶었는데 모든 내부 리스트에서 [1] 인덱스 부분이 바뀐다.
리스트에서 특정 값을 가지는 원소를 모두 제거하기
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)
# [1,2,4]
'민공지능 > 알고리즘' 카테고리의 다른 글
[이것이 취업을 위한 코딩 테스트다 with 파이썬] 1-4강(함수와 람다 표현식, 라이브러리) (0) | 2021.04.29 |
---|---|
[이것이 취업을 위한 코딩 테스트다 with 파이썬] 1-3강(파이썬의 기본 입출력, 조건문, 반복문) (0) | 2021.04.28 |
[이것이 취업을 위한 코딩 테스트다 with 파이썬] 2-2강(구현) (0) | 2021.04.28 |
[이것이 취업을 위한 코딩 테스트다 with 파이썬] 2-1강(그리디 알고리즘, 예제) (0) | 2021.04.27 |
[이것이 취업을 위한 코딩 테스트다 with 파이썬] 1-2강(문자열, 튜플, 사전, 집합 자료형) (0) | 2021.04.27 |