[TIL] 2021.03.04

김경태·2021년 3월 4일
0

이머시브 과정 2주차 3일째 되는날이다.
오늘은 Data Structure(자료구조)에 대하여 일부분을 배우고 코플릿에 있는 문제를 푸는 시간을 가졌다.
블로깅을 해보며 오늘 배운 자료구조에 대하여 정리해보는 시간을 가지자 !

🔥Today Lesson🔥

  • Stack
  • Queue

자료구조란?

자료구조는 데이터들을 어떻게 묶을것인지 그것들을 어떻게 사용 할 것 인지 정의한 것이다.

Stack 💦

Stack이란?
Stack을 해석해보면 '쌓다' 라는 뜻이 있다. 말 그대로 Stack은 자료를 쌓는 구조이다.

쉽게 예를 들어보자 우리가 도서관에 가서 필요한 책들을 하나씩 꺼내서 가방에 담는 다고 가정을 해보자

그럼 이때 가방을 Stack 책들을 자료 라고 생각해 볼수있다.

이때 책들을 흐트리지 않고 꺼내기 위해서는 제일 마지막에 넣은 책을 먼저 꺼냏고 그 다음 책을 꺼내야 맨 처음 넣은 책을 꺼낼수 있다.

이런 Stack 자료구조의 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)이라고 부르기도 한다.

Stack의 실사용 예제
우리가 이런 Stack을 어디에 사용하고 있을지 찾아보면 브라우저의 뒤로가기 앞으로가기 기능을 생각해 볼수있다.

  1. 새로운 페이지를 접속할 때 현재 페이지를 Prev Stack에 넣는다.
  2. 뒤로가기 버튼을 눌렀을때 현재 페이지를 Next Stack에 넣고 Prev Stack에 제일 마지막에 넣은 페이지를 불러온다.
  3. 앞으로가기 버튼을 눌렀을때 현재 페이지를 Prev Stack에 넣고 Next Stack에 제일 마지막에 넣은 페이지를 불러온다.

Queue 💦

Queue란?
Queue를 해석해보면 '줄을서다', '대기 행렬' 이라는 뜻을 가지고 있다.

Queue도 이해하기 쉽게 예를 들어보자

놀이공원을 떠올려보자 놀이공원에 도착해서 제일 먼저 입장하기 위해서 매표소로 향할 것이다. 이때 매표소 에서는 표를 끊기 위해 줄을 선 사람들이 있을 것이다. 이때 매표소를 Queue 줄을 선 사람들을 자료 라고 생각해 볼수있다.

매표소에서 표를 끊기 입장할때 줄을 선 사람중 제일먼저 와서 줄을 서고 있던 사람이 입장을 해야 그 다음 사람이 입장을 할수있다.

위 예로 보아 Queue는 Stack과 반대로 FIFO(First In First Out) 혹은 LILO(Last In Last Out) 의 특성을 가지고 있는 자료구조이다.

Queue의 실사용 예제
Queue의 실사용 예제로는 우리가 자주 사용하는 프린터로 문서를 인쇄할때를 생각해 볼수있다.

  1. 우리가 문서를 작성하고 출력 버튼을 누르면 해당 문서는 인쇄 작업 들어간다 즉 Queue(임시 기억 장치)에 들어가게 된다.
  2. 프린터는 인쇄 작업 Queue로 들어온 순서대로 문서를 인쇄합니다.

컴퓨터 장치들 사이에서(위 예제에서는 컴퓨터와 프린터 사이) 자료(data)를 주고 받을 때 각 장치들 사이에 존재하는 속도의 차이나 시간 차이를 극복하기 위한 임시 기억 장치로 Queue가 사용된다. 이것을 통틀어 버퍼(buffer)라고 한다.

하루를 마치며👋

이전에 오늘 배우는 자료구조 부터 분명 멘탈이 와르르 나갈것이라고 누군가가 신신당부 한적이 있다. 근데 그 당시에는 그때도 당시에 배우고 있는게 어렵다고 생각이 들어서 어려워봤자 지금 배우고 있는 수준이겠지 라는 생각을 했었는데 역시 사람말 하나하나가 괜한 말이 아니라는걸 느끼게 되었다... urclass에 있는 내용을 보며 이해를 할때는 어느정도 이해를 해서 나쁘지 않은 느낌을 받았는데 딱 페어분과 코플릿을 풀어보니 진짜 머리가 터질뻔 했다... 특히나 알고리즘 문제라 그런지 뇌에서 과부하가 걸린다는걸 느끼는 시간이었다... 그렇지만 포기하지 않고 페어분과 협력하여 풀어서 마지막 문제를 빼고 다 풀긴했다... 물론 문제수가 적어서 다행이었지 한문제 한문제 이해하기도 벅찼다...😂😂😂
오늘 페어분과 과제 진행하면서 느낀게 있는데 다시한번 수도코드의 중요성에 대해서 깨닫게 되었다. 문제들이 어려웠지만 페어분이 수도코드를 하나씩 적어 나아가면서 문제를 푸니 그래도 문제에 흐름이 보여서 풀기 더 쉬웠던거 같다. 지금까지 수도코드 적는게 당연히 좋다는걸 알고있었지만 수도코드 작성에 어려움을 느껴서 안적고 그냥 문제 푼적이 많았는데 이번 기회에 반성하고 앞으로는 수도코드 작성하는 연습을 꼭 해야겠다고 생각했다. 이후 시간에 마지막 남은 문제를 풀면서 복습겸 수도코드 적는 연습을 하고 자야겠다 ❗❗

profile
비전공자로 시작한 개발자 지망생입니다!

0개의 댓글