Computer Science/자료구조와 알고리즘

1. 선형배열

선형 배열 (linear array)

 

  • 배열 (array) : 같은 종류의 데이터(원소)들을 순서대로 늘어 놓은 것
    • 파이썬에는 따로 array가 존재하지 않는다
  • 리스트 (list) : 파이썬에서 array를 대체하는 융통성 있는 내장 자료구조
    • 서로 다른 데이터 타입의 원소들을 한 리스트 안에 담을 수 있다 ex) L=['Bob', 1, 3.14]
    • 리스트 속 원소들의 길이가 달라도 상관 없다 ex) L=['Bob, Cat','Spam','Programmers']

 

리스트 연산

 

 

append(원소 끝에 붙이기)

 

L=['monkey','cat','dog','elephant']
L.append('gorilla')
print(L)

>>>['monkey','cat','dog','elephant','gorilla']
  • O(1)의 연산

 

 

 

pop(원소 끝에서 가져오기)

 

 


L=['monkey','cat','dog','elephant']
print(L.pop()) #'elephant'반환
print(L)

>>>'elephant'  
>>>['monkey','cat','dog']
  • pop()함수는 마지막 원소를 반환하는 리스트 함수 (뒤에 나오는 del함수와의 차이점)
  • 반환된 마지막 원소는 자동으로 리스트에서 삭제된다
  • O(1)의 연산

 

 

 

insert(원소 삽입)

 

 

  • L.index(자리 인덱스, 값)
  • 원하는 삽입 자리에 값을 넣는 것
L=[1,20,3,7,9]
L.insert(3,6)
L

>>>[1,20,3,6,7,9]

 

 

insert 과정

 

  • O(n)의 연산

 

 

 

del(원소 삭제)

 

 

  • del L[자리 인덱스]
  • 원하는 위치의 값을 삭제
  • L.remove(삭제할 아이템)과의 차이 : L.del()는 위치로 삭제, L.remove()는 아이템으로 삭제
  • L.pop(자리인덱스)과의 차이:
    • pop()는 원소를 삭제, 그리고 삭제하는 원소를 반환 해준다
    • del()과 remove()는 반환값이 없다

 

del()

L=[1,20,3,7,9]
del L[2]
L

>>>[1,20,7,9]

 

remove()

L=[1,20,3,7,9]
L.remove(1)
L

>>>[20,3,7,9]

 

pop()

L=[1,20,3,7,9]
L.pop(2)

>>>3

print(L)

>>>[1,20,7,9]

 

 

delete과정

 

  • O(n)의 연산

 

 

 

index(원소 탐색)

 

 

L=[1,20,3,7,9]
L.index(3)

>>>2

L=[1,20,3,7,9]
L.index(54)

>>>ValueError: 54 is not in list  (error)

 

 

 

Challenge

 

challenge1: sorted list에 insert하는 코드 작성해보기

  • 리스트 L과 정수 X(위치)를 인자로 받아서 원소를 X위치에 삽입하고 결과로 삽입된 정렬 리스트를 반환하는 함수
  • 예 ) L=[20, 37, 58, 72, 91] 이고 X=65면, 리턴값은 [20, 37, 58, 65, 72, 91]
def solution(L, x):
    answer = []
    flag=0
    for i in range(len(L)):
        if x<L[i]:
            flag=1
            L.insert(i,x)
            break
    if flag==0:
        L.append(x)
    answer=L
    return answer

 

 

challenge2: list에서 원소를 모두 찾아내는 코드 작성해보기

  • 리스트 L과 X(원소)를 인자로 받아서 원소 X가 발견되는 모든 위치 인덱스를 리스트로 반환하는 함수
  • 예) L=[64, 72, 83, 72, 54] 이고 x=72면, 리턴값은 [1,3]
  • 예) L=[64, 72, 83, 72, 54] 이고 x=83면, 리턴값은 [2]
  • 예) L=[64, 72, 83, 72, 54] 이고 x=844면, 리턴값은 [-1] #없으면 -1 리턴

def solution(L, x):
    answer = []
    for i in range(len(L)):
        if(L[i]==x):
            answer.append(i)
    if len(answer)==0:
        answer.append(-1)


    return answer