실생활에서 정리정돈은 필수는 아니지만, 누구나 중요하다는 사실을 알고 있다. 정리를 하는 이유는 무엇일까?
그 이유가 몇가지정도 있겠지만 지금 생각나는 것으로는
"
첫째로, 작업공간의 확보를 위해서. 너저분해진 책상 위를 정리해서 책 또는 작업물을 펼쳐놓는다.

둘째로, 시각적인 만족감을 위해서. 정돈되지 않은 상태의 환경에서 정리 후의 환경을 보면 그 규칙성에 만족감을 느끼기 마련이다.
셋째로, 더욱 효율적작업을 위해서. 공구함이나 나사 같은 것을 나중에 빨리 찾아서 사용할 수 있게 규격과 크기에 맞춰서 정리해둔다.
"
정도가 있지 않을까 싶다. 

코딩에서도 정리정돈은 중요하다. 코더가 보기 쉬운 가독성 좋은 코드로서의 정리도 있을 것이고, 우리가 가장 중요하게 생각하는 시간과 메모리 차원에서도 효율적인 사용을 위한 정리도 있을 것이다. 그 정리의 기초는 바로 자료구조이다.
자료구조에는 숫자, 문자열, 리스트, 딕셔너리, 튜플, 세트 등 과같이 많은 자료구조가 있지만,
오늘 다루고자 하는 자료구조는 다음에 이어질 BFS, DFS 를 위해 "리스트"와 "스택" 그리고 "큐"이다.

리스트는 굳이 비교하자면 튜플과 비슷하겠지만, 튜플과 달리 입력된 데이터를 수정할 수도 있다는 차이점이 있다.

스택(Stack) 자료구조는 파이썬에서는 제공하지않는다. 하지만 간단한 만큼 리스트 자료구조를 통해서 간접적으로 구현할 수 있다.
스택 자료구조의 골자는 "후입선출(後入先出)" 이다. 마치 박스를 쌓는 것과 마찬가지로 나중에 들어온 자료가 가장 먼저 나간다.

이미지 출처 : 위키백과 Stack 자료형

스택( Stack )자료구조는 위 사진과 같이 먼저 들어온 자료가 가장 나중에 삭제(Pop) 되는 자료구조임을 알 수 있다. 하지만 앞서 말한 대로 위와 같은 스택 자료구조는 파이썬에서 제공하지 않는다. 따라서 삽입(Push) 대신 리스트 자료구조의 append() 함수가 스택의 Push와 동일하게 작동하므로, append 함수를 사용하여 나타낼 수 있다.

Data = []
Data.append(7)
Data.append(8)
Data.append(9)

print(Data)
>>> [7,8,9]

Data.pop()
print(Data)
>>> [7,8]


다음으로, 큐 (Queue) 자료구조는 일반적인 대기줄과 비교를 하면 좋다.
큐 자료구조의 주요 골자는 "선입선출(先入先出)"이다. 먼저 들어온 자료가 먼저 나가는 것으로 개인적으로는 정말 많은 상황에서 사용하게 되는 것 같다.

이미지 출처 : 위키백과 Queue 자료구조

스택 자료구조와는 다르게 큐 자료구조는 파이썬의 collections 라이브러리에서 deque를 제공한다.
deque는 스택과 큐의 장점을 모두 가져온 것으로, 데이터를 넣고 빼는 속도가 리스트를 사용할 때 보다 더 빠르다는 큰 장점이 있다. deque 는 append()와 appendleft() 그리고 pop()과 popleft()를 모두 제공하므로, deque를 이용해서 스택을 사용할 수도 있다.

Data = deque()
Data.appendleft(1)
Data.appendleft(0)

print(Data)
>>> deque([0,1])

# 만약 deque 자료형을 list로 반환받고 싶다면?
Data = list(Data)
print(Data)
>>> [0,1]

 

[[ 마무리 ]]
처음에는 결국 다 똑같이 리스트 자료구조에서 파생되는 것 같고, 시간 차이도 크게 안나는 것 같은데 왜 굳이 나눠놓았을까? 하는 의문심을 가졌었다. 컴퓨터의 연산속도는 컴퓨터의 사양에 따라 다르지만 초당 약 1억 회라고 가정한다. 하지만 우리가 다루는 데이터의 양은 적게는 십의 단위이지만,  크게는 만/억의 단위이다. 만의  세제곱만 하더라도 조를 넘어가서 컴퓨터로써의 연산도 1만 초에 달한다.  컴퓨터의 빠른 연산속도 또한 비교군이 사람이기 때문에 빠르다고 느끼는 것일 뿐 우리가 다루어야 할 데이터의 크기는 훨씬 크다. 해당 자료구조를 사용하는 이유는 오로지 하나. 더 빠르고 효율적으로 데이터를 계산하기 위해서이다.  10의 단위일 땐 똑같이 찰나의 순간이지만 더욱 큰 수의 단위로 넘어갈수록 체감하는 속도가 더욱 커지기 때문에 더 빠른 속도를 위해서 상황에 맞는 자료구조의 사용 또한 필요로 하는 것이다.
다음 글에서는 탐색 알고리즘 BFS/DFS를 다루고자 한다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기