Computer Science/자료구조

[4.24] 2장 마무리

토마토. 2021. 4. 24. 15:09

<파이썬의 인수 전달>

1) 인수가 이뮤터블일 때(ex) int)

: 매개변수 값을 변경하면 -> 다른 객체를 생성하고, 그 객체를 참조함

2) 인수가 뮤터블일 때(ex) list)

: 매개변수 값을 변경하면 -> 객체 자체를 업데이트함. 

: 리스트에서 임의의 원솟값을 업데이트할 때

입력 : 리스트 x, 업데이트할 인덱스, 새로운 값

출력 : 업데이트된 리스트 x

def change(lst, idx, val):
  ''' lst[idx]의 값을 val로 업데이트 해준다 '''
  lst[idx] = val
  return lst

x = [0, 1, 2]
print(change(x, 0, 3))

 

<소수prime number 나열하기>

입력 : n

출력 : 정수 n 이하의 소수를 나열하기

소수 - n보다 작은 수로 나누었을 때 나누어떨어지는 수가 자신과 1뿐임

def prime(n):
    for i in range(2, n):
      if n % i == 0:
        print("n은 소수가 아닙니다.")
        break
      elif i == n-1 and n % i != 0:
        print("n은 소수입니다.")

prime(5)

 

ㅎ 모르겠다 ㅠㅠ

def prime(n):
  for j in range(2, n+1):
    for i in range(2, j):
      if n % i == 0:
        #n은 소수가 아님
        break
      elif i == n-1 and n % i != 0:
        #n은 소수임
        print(n)
      

prime(4)

예제 코드

for n in range(2, 1001):
  for i in range(2, n):
    if n % i == 0:
      break
  else: 
    print(n)

알고리즘 개선하기 1 - '어떤 소수로도 나누어 떨어지지 않음'

prime = []
prime.append(2)

for n in range(3, 101, 2):
  for i in prime:
    if n % i == 0:
      break
  else:
    prime.append(n)
    print(n)

예제 코드

counter = 0
ptr = 0
prime = [None] * 500

prime[ptr] = 2
ptr += 1

for n in range(3, 101, 2):
  for i in range(1, ptr):
    counter += 1
    if n % prime[i] == 0:
      break
  else:
    prime[ptr] = n
    ptr += 1

for i in range(ptr):
  print(prime[i])

print(counter)

알고리즘 개선하기 2 - 'n의 제곱근 이하의 어떤 소수로도 나누어 떨어지지 않습니다'

counter = 0
ptr = 0
prime = [None] * 500

prime[ptr] = 2
ptr += 1

for n in range(3, 101, 2):
  if math.sqrt(n) >= prime[i]:
    for j in range(1, i)




  for i in range(1, ptr):
    counter += 1
    if n % prime[i] == 0:
      break
  else:
    prime[ptr] = n
    ptr += 1

for i in range(ptr):
  print(prime[i])

print(counter)

<리스트의 원소와 복사>

객체가 갖는 멤버의 값을 새로운 객체로 복사할 때

1) 얕은 복사 - 참조값만 복사하는 방식

: 얕은 복사의 예시

x = [[1, 2, 3], [4, 5, 6]]
y = x.copy()
x[0][1] = 9
print(x)
print(y) #x와 y 출력값 똑같음

2) 전체 복사 / 깊은 복사 - 객체가 갖는 모든 멤버(값과 참조 형식 모두)를 복사하는 방식

import copy
x = [[1, 2, 3], [4, 5, 6]]
y = copy.deepcopy(x)
x[0][1] = 9
print(x)
print(y) #이때 y는 [[1, 2, 3], [4, 5, 6]]