[TIL]2022.11.25. 10일차

주민석·2022년 11월 25일
0

오늘의 특강 내용 정리

스택 후입선출

스택의 예시 및 정보!

편의점에서 음료를 채울때 앞부터 차곡차곡 채우고, 손님은 앞에서 꺼낸다.
뒤로가기 버튼을 누르면 전 페이지가 나온다.
Undo/Redo 같은 기능도, 역순의 성질을 이용할때!
LIFO(Last In First Out)의 성격을 가진 자료 구조!
넘치는 건 stackoverflow
반복문에서 종료조건 지정하지 않거나, 잘못된 종료조건을 지정하여 무한루프가 생기면 발생!!
스택영역이 쌓이고 쌓여 터진다

스택의 사용법

픽(peek): TOP 데이터를 보는것
푸시(push): 스택에 원소를 삽입하는 행위!!(원소는 top에 들어간다!)
팝(pop): 스택의 top에서 원소 가져오기

def peek(self):
    if self.head is None:
        return "Stack is empty!"
    # 위의 리턴 코드는 좋지 않아요. 
    # 예외를 던지는 것도 아닌데다가 본인이 메시지를 결정해요!
    # 스택이 비어있을 때 나오는 메시지를 결정하는 것은 이 함수 호출부가 해야해요!
    # 따라서, 이 때는 return None으로 None을 던지고 호출부를 아래처럼 작성해요!

    ### peek() 호출부 시작
    # top = stack.peek()
    # if top is None:
    #   print("Stack is empty!")
    #   ...
    ### peek() 호출부 끝
        
    return self.head.data
def push(self, value):                 # 현재 [4] 밖에 없다면
    new_head = Node(value)             # [3] 을 만들고!
    new_head.next = self.head          # [3] -> [4] 로 만든다음에
    self.head = new_head               # 현재 head의 값을 [3] 으로 바꿔준다.
def pop(self):
    if self.head is None:                # 만약 비어있다면
        return "Stack is empty!"         # 여기서도 메시지를 리턴하지말고 None 리턴! 
    delete_head = self.head              # 제거할 node 를 변수에 잡습니다.
    self.head = self.head.next           # 그리고 head 를 현재 head 의 다음 걸로 잡으면 됩니다.
    return delete_head                   # 그리고 제거할 node 반환

픽 푸시 팝!

큐 선입선출

서버 접속 대기열 / 롤 대기열 큐 / 인쇄 대기열 큐
FIFO(First In First Out)의 성격을 가진 자료 구조!

큐의 사용법

픽(peek): 큐의 맨 앞 데이터를 보는 것
삽입(enqueue): 큐에 원소를 삽입함(맨 뒤로 들어감)
dequeue(뽑기): 큐에서 원소를 뽑아오는 행위

def enqueue(self, value):              
    new_node = Node(value)             
    if self.head is None:              # 만약 비어있다면,
        self.head = new_node           # head(Front)에 new_node를
        self.tail = new_node           # tail(Rear)에 new_node를 넣어줍니다!
        return

    # 비어있지 않다면 기존 tail에 새 노드를 포인터로 연결하고요! 
    self.tail.next = new_node
    # 새 노드를 tail로 설정해요!
    self.tail = new_node
def dequeue(self):
    if self.head is None
        return "Queue is empty!" # 이런식의 코드는 좋지 않다고 말씀드렸었어요!

    # 제거할 node를 변수에 잡습니다.
    delete_head = self.head
    # 그리고 head(Front)를 현재 head의 다음 걸로 잡으면 됩니다.
    self.head = self.head.next

    # 그리고 제거할 node 반환을 해요!
    return delete_head.data

픽 삽입 뽑기!

정렬 (이진탐색 가능)
버블정렬
선택정렬
삽입정렬
.
.
.

원격강의 들으면서 배운 내용 정리

이진탐색: 중간을 기준으로 탐색
재귀: 어떠한 것들을 정의할 때 자기 자신을 참조(무한정 돌게X, 탈출조건 필수)
팩토리얼 (표기법! | ex - 3! = 3 × 2 × 1)
1부터 어떤 양의 정수 N까지의 모든 정수를 곱한 것
탈출조건 필요!!

if n == 1:				#탈출조건!!
        return 1 
        
Factorial(n) = n * Factorial(n - 1) #여기만 써주면 됩니다!
Factorial(n - 1) = (n - 1) * Factorial(n - 2)
....
Factorial(1) = 1

회문
똑바로 읽으나 거꾸로 읽으나 똑같은 단어나 문장
ex) 토마토, 오디오, 아시아, 일요일, 소주만병만주소,
가련하시다 사장 집 아들 딸들아 집 장사 다시하련가
is_palindrome("ex") -> boolean 형태로 (True, False)

profile
나는 주민석

1개의 댓글

comment-user-thumbnail
2022년 11월 26일

코드 넣을때 첫 줄 백틱3개 뒤에 python 적으면 더 이뻐집니다 ... ☆

print("요렇게")
답글 달기