자료구조 알고리즘 공부 4주 차에 대한 이야기이다.
다음 주부터 컴활 1급 공부와 독학사 2단계 공부 때문에 자. 구. 알 공부를 잠시 멈춰야 할 것 같다.
어느 정도 기초공부를 마무리하고 싶어서 이번 주에는 일단 계획을 조금 타이트하게 잡았는데,
그래도 맞춰서 일단 진행할 수 있었다.
#11일차
#최댓값 구하기1
a = [2,3,1]
maximum = a[0]
if a[1] > maximum : maximum = a[1]
if a[2] > maximum : maximum = a[2]
maximum
#최댓값 구하기2
a = [2,3,1]
maximum = a[0]
for i in range(1,len(a)):
if a[i] > maximum :
maximum = a[i]
maximum
#최댓값 구하기 함수 정의
from typing import Any, Sequence
def max_of(a: Sequence) -> Any :
maximum = a[0]
for i in range(1,len(a)):
if a[i] > maximum :
maximum = a[i]
return maximum
if __name__ == '__main__':
print('배열의 최대값을 구합니다')
num = int(input('원소의 수를 입력하세요 :'))
x = [None] * num
for i in range(num):
x[i] = int(input(f'{i+1}번째 값을 입력하세요:'))
print(f'최대값은 {max_of(x)} 입니다')
#12일차
#최댓값 구하기 함수 활용1
from max import max_of
print('배열의 최댓값')
print('End 입력시 종료')
number = 1
x=[]
while True:
s = input(f'{number}번째 값을 입력하세요.:')
if s == 'End':
break
x.append(int(s))
number = number + 1
print(f'{number}개가 입력되었습니다')
print(f'최대값은 {max_of(x)}입니다')
#최댓값 구하기 함수 활용2
import random
from max import max_of
print('난수의 최대값')
num = int(input('난수의 개수'))
lo = int(input('난수의 최솟값'))
hi = int(input('난수의 최댓값'))
x = [None] * num
for i in range(num):
x[i] = random.randint(lo,hi)
print(f'{(x)}')
print(f'이 가운대 최댓값은 {max_of(x)}입니다.')
#최댓값 구하기 함수 활용3
from max import max_of
t = (4,2,6,3.14,2.7,1)
s = 'string'
a = ['dts', 'aac', 'flac']
print(f'{t}의 최대값은 {max_of(t)}입니다')
print(f'{s}의 최대값은 {max_of(s)}입니다')
print(f'{a}의 최대값은 {max_of(a)}입니다')
#13일차
#리스트 동일성 판단
lst1 = [1,2,3,4,5]
lst2 = [1,2,3,4,5]
lst1 is lst2
lst1 = [1,2,3,4,5]
lst2 = lst1
lst1 is lst2
#리스트 성질1
x = ['john', 'george', 'paul', 'ringo']
for i in range(len(x)):
print(f'x[{i}]= {x[i]}')
#리스트 성질2
x = ['john', 'george', 'paul', 'ringo']
for i, name in enumerate(x):
print(f'x[{i}]= {name}')
#리스트 성질3
x = ['john', 'george', 'paul', 'ringo']
for i, name in enumerate(x,1):
print(f'{i}번째 = {name}')
#역순 정렬 함수
from typing import Any, MutableSequence
def reverse_array(a: MutableSequence)-> None:
n = len(a)
for i in range(n//2):
a[i], a[n-i-1]=a[n-i-1],a[i]
if __name__ == '__main__':
print('배열 원소를 역순 정렬')
nx = int(input('원소 수:'))
x = [None] * nx
for i in range(nx):
x[i] = int(input(f'x[{i}]값을 입력하세요:'))
reverse_array(x)
print('원소 배열을 역순으로 정렬완료')
for i in range(nx):
print(f'x[{i}]={x[i]}')
#14일차
#진수 변환 함수 정의
def card_conv(x: int, r: int) -> str:
d=''
dchar='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
while x>0:
d= d+dchar[x%r]
x //= r
return d[::-1]
#진수 변환 함수 활용
if __name__=='__main__':
print('10진수를. n진수로 변환')
while True:
while True:
no = int(input('변환할 음이 아닌 정수:'))
if no > 0 :
break
while True:
cd = int(input('어떤 진수? :'))
if 2 <= cd <= 36 :
break
print(f'{cd}진수로는 {card_conv(no, cd)}입니다')
retry = input("한 번 더 변환 ? (y/n)")
if retry in {'N', 'n'}:
break
print('실행 끝')
#15일차
#1부터 정수합 함수 정의1
def sum_1ton(n):
s=0
while n>0:
s=s+n
n=n-1
return s
x= int(input('x의 값 :'))
print(f'1부터 {x}까지 합은 {sum_1ton(x)}')
#1부터 정수합 함수 정의2
def sum_1ton(n):
s=0
for i in range(n+1):
s = s+i
return s
x= int(input('x의 값 :'))
print(f'1부터 {x}까지 합은 {sum_1ton(x)}')
#인덱스 업데이트
def change(lst, idx, val):
lst[idx]=val
x = [11,22,33,44,55]
print('x=',x)
index = int(input('업데이트할 인덱스 선택:'))
value = int(input('새로운 값을 입력 :'))
change(x, index, value)
print(f'x={x}')
#소수탐색 알고리즘
counter = 0
for n in range(2,1001):
for i in range(2,n):
counter = counter+1
if n% i == 0:
break
else :
print(n)
print(f'나눗셈 실행 횟수:{counter}')
#소수탐색 알고리즘 개선1
counter = 0
ptr=0
prime = [None]*500
prime[ptr] = 2
ptr = ptr+1
for n in range(3,1001,2):
for i in range(1,ptr):
counter = counter+1
if n % prime[i] == 0:
break
else :
prime[ptr] = n
ptr = ptr + 1
for i in range(ptr):
print(prime[i])
print(f'나눗셈 실행 횟수:{counter}')
#소수탐색 알고리즘 개선2
counter = 0
ptr=0
prime = [None]*500
prime[ptr] = 2
ptr = ptr+1
prime[ptr] = 3
ptr = ptr+1
for n in range(5,1001,2):
i=1
while prime[i] * prime[i] <=n:
counter = counter+2
if n % prime[i] == 0:
break
i=i+1
else :
prime[ptr] = n
ptr = ptr + 1
counter = counter+1
for i in range(ptr):
print(prime[i])
print(f'나눗셈 실행 횟수:{counter}')
#리스트 원소와 복사
x= [15,64,7,3.14,[32,55],'abc']
for i in range(len(x)):
print(f'x[{i}]={x[i]}')
4주차 느낌 :
4주 동안 짧게나마 자료구조의 기초를 알 수 있어서 좋았다.
컴활과 독학사 2단계 즉, 학점은행제가 어느 정도 마무리되면 다시 파이썬 공부를 이어가야겠다.
그때는 이제 검색 알고리즘부터 진짜가 시작할 것 같다.
'컴퓨터 공부 > Python' 카테고리의 다른 글
자료구조 알고리즘 공부 3주차 (0) | 2022.04.03 |
---|---|
자료구조 알고리즘 공부 2주차 (0) | 2022.03.27 |
자료구조 알고리즘 공부 1주차 (0) | 2022.03.20 |