Queue

Queue

공부한 내용을 스스로 보기 쉽게 정리한 글입니다.

Queue의 특징

  1. 내가 버스정류장에 서있다고 생각해보면, 버스 전용차선으로 버스가 줄지어 들어온다. 아무리 뒷차가 손님을 다 태웠다고해서, 앞에 버스가 아직 손님을 태우고 있으면 뒷 버스는 출발 하지 못한다.

    이것이 바로 QUEUE
  2. FIFO : First In First Out == 선입선출 or 후입후출
  3. front와 rear 라는 index가 각각 구조의 맨 앞과 뒤를 가리키고 있다. Data는 rear로 들어가고, front 에서 나온다.

ADT

  1. empty() 라는 메소드로 Queue 에 data가 있는지 없는지 확인하게 한다. empty 이면 True, not empty 이면, False 를 return 한다.

    Queue.empty() returns Boolean

  2. enaueue(data) 메소드로 Queue의 rear 가 가리키고 있는 data 뒤에 data를 넣는다.

    Queue.enqueue (data) returns None

  3. dequeue() 메소드로 Queue의 front가 가리키고 있는 data를 반환하면서 삭제 된다.

    Queue.dequeue() returns data

  4. peek() 메소드로 Queue의 front가 가리키고 있는 data를 반환한다. peek은 어디까지나 확인하는 메소드 이므로, data가 삭제되지 않는다.

    Queue.peek() returns data

구현 1 : by python list

  • Queue 구조를 Python에 내장 되어 있는 list를 container 로 구현한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Queue:
def __init__(self):
self.container=list()

def empty(self):
# ADT 를 따라서, 비어 있으면 return True 비어있지 않으면 return False
if not self.container:
return True
return False

def enqueue(self, data):
# list 를 활용했으므로, list.append(data)를 활용할 수 있다.
self.container.append(data)

def dequeue(self):
# pop 역시 list.pop()을 활용할 수 있다.
return self.container.pop(0)

def peek(self):
# peek은 단지 front 에 어떤 데이터가 있는지 확인 하는 것 뿐이므로, 현재 리스트의 가장 앞 부분에 있는 data 를 확인하면 된다.
return self.container[0]

구현 2 :

Stack

Stack

공부한 내용을 스스로 보기 쉽게 정리한 글입니다.

Stack 의 특징

  1. 접시를 쌓듯이 데이터를 쌓아 올리는 모양의 데이터 구조
  2. LIFO : Last In First Out == 후입선출 or 선입후출
  3. top index 가 항상 Stack의 가장 윗부분을 가리키고 있어, 우리는 top 위치만 볼 수 있다.
  4. 단점 : stack 의 top 이 외에 밑에 쌓여져있는 데이터의 Search 가 안된다.

ADT

  1. empty() 라는 메소드로 Stack 에 data가 있는지 없는지 확인하게 한다. empty 이면 True, not empty 이면, False 를 return 한다.

Stack.empty() returns Boolean
2. Stack의 top 위치에 데이터를 쌓는다.

Stack.push(data) returns None

  1. Stack의 top 위치에 있는 데이터를 삭제하면서 반환한다.

Stack.pop() returns data
4. Stack의 top 위치에 있는 데이터를 반환하지만, 삭제하지 않는다. 어떤 데이터가 있는지 just 확인.

Stack.peek() returns data

구현 1 : by python list

  • Stack 구조를 Python에 내장 되어 있는 list를 container 로 삼아 구현하게 되면, 그 구현은 매우매우 쉽다.
  • Python의 List 자료형의 대단함을 그만큼 느낀다.
  • 이 때 List 의 index가 큰 쪽이 top 방향이다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Stack:
    def __init__(self):
    self.container=list()

    def empty(self):
    # ADT 를 따라서, 비어 있으면 return True 비어있지 않으면 return False
    if not self.container:
    return True

    return False

    def push(self, data):
    # list 를 활용했으므로, list.append(data)를 활용할 수 있다.
    self.container.append(data)

    def pop(self):
    # pop 역시 list.pop()을 활용할 수 있다.
    return self.container.pop()

    def peek(self):
    # peek은 단지 top 에 어떤 데이터가 있는지 확인 하는 것 뿐이므로, 현재 리스트의 가장 마지막에 append 되어 있는 data를 확인하면 된다.
    return self.container[-1]

구현 2 :

181022 TodayWhatILearned

181022 TWIL

오늘 할 일은 무엇인가

  1. 블로그 테마 바꾸기
  2. Selenium 과제 두번째 것 (17:47 - 19:00)
  3. 확률 분포 다시 한번 정리하기
  4. 데이터구조 (PseudoLinkedList, Stack, Queue)정리
  5. 새 맥북 환경 설정 조금씩 마저 더하기
  6. DailyScrum Upload

오늘 한 일은 무엇인가

  1. Selenium NBA Page Crawling 해서, DataFrame으로 정리 (17:47 - 18:55)
  2. Stack 정리
  3. Github 설정

내일 할 일은 무엇인가

  1. 확률 분포 공부
  2. Queue 정리

무엇을 느꼈는가

  • 맥북을 바꾸면서, 환경 설정하는데 너무 많은 시간이 든다. 틈틈히 하고 있는데도 아직 이전 맥북의 환경에서 100% 똑같은 환경을 만들지 못하고 있다. 장비를 바꿀 때, 혹은 다른 작업 환경에서 연속성을 이어 나가기 위해 나에게 맞는 환경설정도 정리할 필요성을 느낀다.
  • 오늘 공부한 PseudoLinkedList, Stack, Queue 의 활용성에 대해 깊이 고민 해 볼 수 있어서 뿌듯하다. 특히나 PseudoLinkedList의 경우 내가 사용하지 않았던 자료구조나 class를 목적에 맞게 customize 할 수 있는 측면에서 활용성이 높다고 생각된다. 다른 사람이 작성한 class 를 잘 읽어보고, 그 활용도를 높이기 위해 overriding 하는 방법을 틈틈히 챙겨 봐야겠다.

181019 TodayWhatILearned

181019

오늘 한 일

  1. Web Crawling (Requests, BS4) 공부
  2. Github 사용할 준비
  3. GitPages 사용 방법
  4. 공부 했던 내용, 공부할 내용 어떻게 정리 할지 고민
  5. 프로젝트 팀 회의

내일 할 일

  1. Pandas 내용 정리, 반복 숙달
  2. 수업 내용 복습
  3. 주말 공부할 내용 계획
  4. 코딩 습관을 기르기 위해 일일코딩과 TWIL에 대해 고민

뭘 느꼈는가

  • 크롤링 코드를 보면서 공부하고, 또 다시 스스로 짜는 것을 연습하면서 내용의 개념과 코드 자체는 어려운 것이 없으나 BeautifulSoup 이나 Requests 패키지에 담겨있는 각 메서드 들의 종류, 기능, 메서드마다 들어가는 attribute를 참고 할 줄 알아야 된다고 느꼈다.
  • 매우 기본적인 메서드들일 수 있기에 외워야 할 수도 있겠지만 (또한 반복한다면 숙달되겠지만) 잊어버렸을 때 각 라이브러리들의 Document들을 잘 볼 줄 아는 것이 중요하다고 느꼈다.
  • 프로젝트 OT 를 한 만큼 본격적인 프로젝트를 진행하기에 앞서 꼼꼼히 준비해 나가야겠다.

181019

오늘 한 일

  1. Web Crawling 공부 : Selenium을 활용한 크롤링
  2. Pandas 활용하여 여러가지 data import 하고, 정렬 바꾸는 연습
  3. Terminal 환경설정
  • zsh, oh-my-zsh 설치했다.
  • git을 적극적으로 활용할 계획이므로, git사용에 유리한 zsh 설정을 마쳤다.
  1. 팀 프로젝트에 활용할 데이터 셋 탐색
  2. github 블로그 Deploy 에 성공했다.
  • Daily 스크럼을 작성하는 것이 하루의 계획과 정리를 하는데 유용하기에, 꾸준히 작성하면서, github 블로그에도 올려볼 계획이다.

내일 할 일

  1. Pandas 내용 정리, 반복 숙달
  2. Naver Article Crawling, NBA Data Crawling
  3. 확률과 통계 정리 (연속확률분포 부분)

뭘 느꼈는가

  • 점차 학습하는 내용과 알아야 될 내용이 많아지면서, 내가 배운 것들, 알고 있는 것들. 정확히는 어떤 것에 관해 존재는 알고 있으나 내 머릿속에서 당장 꺼내서 쓰기에는 어려운 것들이 많아지고 있다.
  • 또한, 내 머릿속에서 꺼내기 쓰기 힘들어 구글을 통해 찾고자하면 내가 기억했던, 알고 있는 정보들과 조금은 내용이 다르고, 이것을 Searching 하는데 쓰는 시간이 아깝다는 생각이 들었다.
  • 앞으로는 매일 학습하는 내용을 바탕으로, 직접 찾기 쉬운 형태로 정리할 필요성을 느꼈다. 개인. WIKI화.

181018_DailyScrum

181018

오늘 한 일

  1. Web Crawling (Requests, BS4) 공부
  2. Github 사용할 준비
  3. GitPages 사용 방법
  4. 공부 했던 내용, 공부할 내용 어떻게 정리 할지 고민
  5. 프로젝트 팀 회의

내일 할 일

  1. Pandas 내용 정리, 반복 숙달
  2. 수업 내용 복습
  3. 주말 공부할 내용 계획
  4. 코딩 습관을 기르기 위해 일일코딩과 TWIL에 대해 고민

뭘 느꼈는가

  • 크롤링 코드를 보면서 공부하고, 또 다시 스스로 짜는 것을 연습하면서 내용의 개념과 코드 자체는 어려운 것이 없으나 BeautifulSoup 이나 Requests 패키지에 담겨있는 각 메서드 들의 종류, 기능, 메서드마다 들어가는 attribute를 참고 할 줄 알아야 된다고 느꼈다.
  • 매우 기본적인 메서드들일 수 있기에 외워야 할 수도 있겠지만 (또한 반복한다면 숙달되겠지만) 잊어버렸을 때 각 라이브러리들의 Document들을 잘 볼 줄 아는 것이 중요하다고 느꼈다.
  • 프로젝트 OT 를 한 만큼 본격적인 프로젝트를 진행하기에 앞서 꼼꼼히 준비해 나가야겠다.