23Days) 자료구조/알고리즘(3) - Stack / Queue

nacSeo (낙서)·2022년 11월 21일
0

◉ 학습목표

1. 자료구조에 대해 이해할 수 있다.
2. Stack과 Queue에 대해 이해하고, 관련 문제 풀이를 통해 알고리즘에 활용할 수 있다.
  1. 자료구조

⦿ 학습내용

☞ 자료구조

✔︎ 자료구조 : 여러 데이터의 묶음을 저장하고, 사용하는 방법을 정의한 것
※ 알고리즘 : 문제를 해결하는 방법 vs 자료구조 : 상황에 맞게 자료를 어디에 저장해야 할지?
→ 알고리즘 문제에 적합한 자료구조를 파악하여 그에 맞는 자료구조를 사용하여 푼다❗️
✔︎ 자주 등장하는 네 가지 자료구조 : Stack, Queue, Tree, Graph

  1. 스택 (Stack)

⦿ 학습내용

☞ 스택 (Stack)

✔︎ 데이터를 순서대로 쌓는 구조
✔︎ 한 개의 입출력 방향, 제한적 접근 방식 (입∙출구가 같음)
✔︎ 후입선출 구조 (LIFO(Last In First Out) 또는FILO(First In Last Out))
✔︎ Stack에 데이터를 넣는 것을 PUSH, 데이터를 꺼내는 것을 POP이라고 함
✔︎ 데이터를 하나씩 넣고 뺄 수 있음

☞ 메서드

✔︎ push() : 스택에 데이터 추가
✔︎ pop() : 가장 나중에 추가된 데이터를 스택에서 삭제하고 삭제한 데이터를 리턴
✔︎ size() : 스택에 추가된 데이터의 크기를 리턴
✔︎ peek() : 가장 나중에 추가된 데이터를 리턴
✔︎ show() : 현재 스택에 포함되어 있는 모든 데이터를 String타입으로 변환하여 리턴
✔︎ clear() : 현재 스택에 포함되어 있는 모든 데이터를 삭제
✔︎ empty() : 현재 스택이 비어있으면 true, 아니면 false 리턴
✔︎ contains() : 현재 스택에 해당 인자의 값이 들어있으면 true, 아니면 false 리턴

  1. 큐 (Queue)

⦿ 학습내용

☞ 큐 (Queue)

✔︎ 두 개의 입출력 방향 (입∙출구가 다름, 따로 존재)
✔︎ 선입선출 구조 (FIFO(First In First Out) 또는 LILO(Last In Last Out))
✔︎ Queue에 데이터를 넣는 것을 enqueue, 데이터를 꺼내는 것을 dequeue라고 함
✔︎ 데이터를 하나씩 넣고 뺄 수 있음

☞ 메서드

✔︎ add() : 큐에 데이터 추가, 여유 공간이 없어 실패하면 IllegalStateException 발생
✔︎ offer() : 큐에 데이터 추가, 실패하면 false 반환
✔︎ poll() : 가장 먼저 추가된 데이터를 큐에서 삭제하고 삭제한 데이터를 리턴
✔︎ size() : 큐에 추가된 데이터의 크기를 리턴
✔︎ peek() : 큐에 가장 먼저 추가된 데이터를 리턴
✔︎ show() : 큐에 들어있는 모든 데이터를 String타입으로 변환하여 리턴
✔︎ clear() : 큐에 들어있는 모든 데이터를 삭제
✔︎ isEmpty() : 큐가 비어있으면 true, 아니면 false 리턴

☞ 버퍼 (Buffer)

✔︎ 컴퓨터의 각 장치 사이 존재하는 속도나 차이를 극복하기 위해, 임시기억장치의 자료구조인 Queue 사용

◉ 느낀 점

☞ 이론과 메서드들을 공부할 땐 '아~ 그렇구나~ 쉽네 ^^~' 하다가 코플릿 3번부터 적용시키는 데 멘붕이 왔다... 이 때까지 만난 그 어떤 코플릿보다 훨씬 어렵고 까다롭게 느껴졌다. 우선, 문제 자체가 길게 늘어져 있어 그거를 코드로 어떻게 작성해야할 지 수도코드를 정하는 것부터가 문제였다. 문제를 이해하는 데만 시간을 엄-청 쏟은 것 같다... 몇 시간동안 끙끙 앓다 결국 레퍼런스 코드를 참고했는데 봐도 이해가 안가는 부분이 있는 건 처음이다.. 자료구조가 정말 까다롭고 어렵다는 것을 다시 한 번 느끼게 된다.
그러나 강사님께서 이와 같은 상황을 많이 봐오셔서 예상하셨던 걸까.. 자료구조에 벽을 느끼고 좌절하지 말라고 하셨다. 자료구조, 알고리즘을 잘 못푼다고 코딩을 못하는 건 아니라고. 선택과 집중을 통해 이 것만 붙잡고 시간을 보내기보다 현업에서 중요한 Spring이나 객체지향쪽 공부를 하는 것이 더 도움될 수 있을 것이다라고 말씀하셨다. 그렇다고해서 이 시간을 헛되이 보내지 말라고 하셨다..!! 어차피 알고리즘, 자료구조는 개발을 하다가도 계속 공부하게 되는 부분이라고 하셨다. 정말이지 나도 주어진 시간 열심히 머리를 굴려봤는데 안되더라 ,,,,, 아직 개발자의 길은 멀고도 험하다 🥲

◉ 내일의 키워드

・ Graph
・ Tree
・ BST (Binary Search Tree)
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글