Computer Science/자료구조

[4.27] 2장(기본 자료구조와 배열) 복습하기

토마토. 2021. 4. 27. 19:58

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