업데이트:

태그: , ,

카테고리:

자료구조와 알고리즘

자료: data
구조: 저장공간(memory) + 연산(읽기,쓰기,삽입,삭제,탐색)

알고리즘: 입력된 data를 기준으로 유한한 횟수의 연산을 반복해서 정답을 출력하는 것

자료구조

자료구조의 예시

1. 변수(variable)

```
a = 3 (쓰기연산)
print(a) (읽기연산)
```
3이 a에 담기는 것이 아닌,  
3이 들어있는 <u>객체의 주소</u>가 a에 담기는 것이다. ### 2. 배열(array)
```
a = [1,2,3,4]

접근: 각 원소의 index(0부터시작)
a[0] = 1


읽기, 쓰기: index값을 이용해 접근하고, 읽기쓰기가능.
print(a[0]) = 1
a[0] = 3 
-> a = [3,2,3,4]

삽입
a.append(9) 
-> a = [3,2,3,4,9] 
a.insert

삭제
a.pop()
->리스트의 마지막 원소 삭제하고 리턴한다.
a.pop(2)
->리스트의 인덱스2를 가진 원소를 삭제하고 리턴한다.
```
리스트도 변수와 동일하게 
각 원소는 각 원소 객체의 주소가 리스트의 인덱스에 담기는 것이다.

알고리즘

알고리즘의 예시


최대공약수(gcd) gcd(8,12) = max{1,2,4} = 4 한쪽이 0이 될때까지 큰수에서 작은수를 빼자

def gcd_sub(a,b):
    while a != 0 and b != 0:
        if a > b:
            a = a-b
        else:
            b = b-a
    return a+b

만약 gcd(2,100) 이라면 50번의 while문을 반복해야한다.



이런 불필요함을 해결하기위해, 우리는 새로운 함수를 만들어야한다.
작은 수를 큰 수로 나눈 나머지로 표현을 한다면,

def gcd_mod(a,b):
    while a! = 0 and b != 0
        if a > b:
            a = a % b
        else:
            b = b % a
    return a + b

1번만에 gcd(2,100) -> gcd(2,0)이 된다.


또 다른 방법으로는 재귀함수를 만드는 방법이 있다.

    def gcd_rec(a,b):
        if a > b:
            gcd_rec(a%b,b)
        else:
            gcd_rec(a,a%b)

참고자료

개인적인 공부를 위한 글이며, 모든 저작권은 신천수 교수님께 있습니다.
자세한 강의 내용은 신천수 교수님 강의를 참고하시면 좋을 것 같습니다.
신천수 교수님 자료구조 강의

댓글남기기