02-1 자료구조와 배열
배열 개념 알아보기
#5명의 시험 점수를 입력받아 합계와 평균 출력하기
def score(n):
score = [None] * n
test = 0
for i in range(n):
score[i] = int(input(f'{i}번째 test score: '))
test += score[i]
print(test)
print(test // n)
score(5)
배열 array
원소 element
인덱스 index
리스트와 튜플 알아보기
리스트 list
튜플 tuple
#빈 리스트 만들기, 마지막 원소에 쉼표 써도 됨
x = list()
n = []
#빈 튜플 만들기, 원소 1개일 때 쉼표 사용
x = tuple()
n = 1,
인덱스로 원소에 접근하기
슬라이스식으로 원소에 접근하기
슬라이스 slice
s[i:j] - s[i]부터 s[j-1]까지
s[i:j:k]
s[:] - 모두 출력
s[:n] - 맨앞부터 n개 출력
s[i:] - i부터 끝까지 출력
s[-n:] - 맨 끝에서부터 n개 출력
s[::k] - 앞부터 k개씩 건너뜀
s[::-1] - 맨끝에서부터 전부 출력
뮤터블 자료형
이뮤터블 자료형
누적변수 - n+= 1
식 statement
문 expression
자료구조의 개념 알아보기
자료구조 data structure - 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계
등가성 equality : ==
동일성 identity : 값은 물론이고 식별 번호까지 동일한지 확인 - 'if'
내포 표기 생성
02-2 배열이란?
배열 원소의 최댓값 구하기
#배열 원소의 최댓값 구하기 - scan 이용
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
max_is = a[0]
for i in a:
if i > max_is:
max_is = i
return max_is
배열 원소의 최댓값 구하는 함수 구현하기
#입력받은 시퀀스 원소의 최댓값 출력하기
: * from typing import Any, Sequence 랑 if __name__ == '__main__': 이용할 것
주석과 자료형 힌트
from typing import Any, Sequence - 자료형
def max_of(a:Sequence)-> Any:
- 매개변수 a의 타입은 시퀀스
- 반환하는 것은 Any
재사용할 수 있는 모듈 작성하기
module - 하나의 스크립트 프로그램
- if __name__ == '__main__' : 이용
모듈 테스트하기
max_of()를 모듈 max로 저장해 다른 프로그램에서 호출하기
#배열 원소의 최댓값을 구해서 출력하기 - 원솟값을 입력받는다.
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
max_is = a[0]
for i in a:
if i > max_is:
max_is = i
return max_is
if __name__ == '__main__':
n = int(input('원소의 개수는?: '))
a = [None] * n
for i in range(n):
a[i] = int(input(f'{i}번째 원소는?: '))
print(max_of(a))
#배열의 원솟값을 난수로 결정하기 - 개수, 최솟값, 최댓값을 입력받음
import random
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
max_is = a[0]
for i in a:
if i > max_is:
max_is = i
return max_is
if __name__ == '__main__':
n = int(input('원소의 개수는?: '))
maxi = int(input('최댓값은? : '))
mini = int(input('최솟값은: '))
a = [None] * n
for i in range(n):
a[i] = random.randint(mini, maxi)
print(max_of(a))
#튜플, 문자열, 리스트의 최댓값 구하기
#동일성 판단 - is
lst1 = [1, 2, 3, 4, 5]
lst2 = [1, 2, 3, 4, 5]
print(lst1 is lst2)
#False
변수를 선언하여 대입해도, 원소 자체는 복사되지 않음
#리스트의 모든 원소를 스캔하여 출력하기
#리스트의 모든 원소를 enumerate() 함수로 스캔하여 출력하기
def scan(a):
for i in enumerate(a):
print(i)
scan([1,2,3,4,5])
#모든 원소를 스캔하기 - no index
def scan(a):
for i in a:
print(i)
a = [1,2,3,4,5]
scan(a)
배열 원소를 역순으로 정렬하기
#뮤터블 시쿼스 원소를 역순으로 정렬 - 원소수와 원소를 입력받은 뒤에, 원소 교환을 이용함
def reverse():
n = int(input('원소 수: '))
lst = [None] * n
for i in range(n):
lst[i] = int(input(f'{i}번째 원소: '))
for i in range(n//2):
lst[i], lst[n-1-i] = lst[n-1-i], lst[i]
return lst
print(reverse())
#리스트를 역순으로 정리 - x.reverse()
기수 변환하기 - n진수 구하기
#10진수 정숫값을 입력받아 2~36진수로 변환하여 출력하기
def reverse(lst):
n = len(lst)
for i in range(n//2):
lst[i], lst[n-1-i] = lst[n-1-i], lst[i]
return lst
def decimal_to(n, x):
deci = '0123456789ABCDEFGHIJKLMNOPQRSTUVWZXYZ'
lst = []
while x>=n:
lst.append(int(deci[x%n]))
x = x//n
lst.append(x)
return reverse(lst)
print(decimal_to(2, 10))
- 문자열 생성, 역순으로 반환
#입력 - 음이 아닌 정수, 변환할 진수
소수 나열하기
#100이하의 소수를 나열하기 - if else는 다른 층위여도 ok
def prime(n):
for i in range(2, n):
for j in range(2, i):
if i % j == 0:
break
else:
print(i)
prime(100)
#알고리즘 개선하기 1 - 소수만을 대상으로 설정, 기존에 찾은 소수로 나누어 떨어지면 소수 아님.
def prime(n):
prime = []
prime.append(2)
for i in range(3, n, 2):
for j in prime:
if i % j == 0:
break
else:
prime.append(i)
return prime
print(prime(100))
#알고리즘 개선하기 2 - 루트 n 이하의 어떤 소수로도 나누어 떨어지지 않음
import math
def prime(n):
prime = []
prime.append(2)
for i in range(3, n, 2):
for j in prime:
if j <= math.sqrt(n):
if i % j == 0:
break
else:
pass
else:
prime.append(i)
return prime
print(prime(100))
'Computer Science > 자료구조' 카테고리의 다른 글
[5.5-6] 03 검색 알고리즘 (0) | 2021.05.05 |
---|---|
[4.28] 검색 알고리즘 (0) | 2021.04.28 |
[4.26] 1장(알고리즘 기초) 복습 (1) | 2021.04.26 |
[4.24] 2장 마무리 (1) | 2021.04.24 |
[4.23] 배열이란? (1) | 2021.04.23 |