[이것이 취업을 위한 코딩 테스트다 with 파이썬] 1-1강(수 자료형, 리스트 자료형)

2021. 4. 27. 00:14민공지능/알고리즘

* 유튜브를 보고 정리한 내용입니다.

이것이 취업을 위한 코딩 테스트다 with 파이썬, 저자 나동빈

 

 시간 복잡도를 표현할 때는 빅오(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]