2주차의 첫날이다.
키워드 단어 위주로 공부했다.
이미 한번 다룬 개념들이기에
개꿀이다
원래 고기도 먹어본 놈이 잘 먹는다고
한번 해본 놈이 더 잘하는 법이다
교과서 위주로 공부했어요!!! 라는 말을 하며 기만하고 싶다는 생각도 어렴풋이 들고 말이다.
준 교재에서 읽은 내용 그대로 과제랑 키워드 단어로 주는 거 보니
더더욱 그러하고 말이다
물론 난 GPT랑 인터넷을 적극 수입했기에
교과서 위주로 안했다 ㅇㅇ;;
좋은 문화 받아들여야
오늘 공부한 키워드는…
…
스택, 큐! 다
간단한 정의는 하이퍼링크로 달아놨으니 확인하면 된다
스택을 내장함수가 아닌 직접 구현해보며
(교재 따라하기)
스택에 관해 알아보자
클래스를 사용할거니 모르겠다면 보고 오자
class FixedStack:
"""고정 길이 스택 클래스"""
class Empty(Exception):
"""비어 있는 FixedStack에 pop 또는 peek를 호출할 때 내보내는 예외 처리"""
pass
class Full(Exception):
"""가득 찬 FixedStack에 push를 호출할 때 내보내는 예외 처리"""
pass
def __init__(self, capacity):
self.stk - [None] * capacity # 스택 본체
sel.capacity = capacity # 스택의 크기
self.ptr = 0 # 스택 포인터
def __len(self):
"""스택에 쌓여있는 데이터 개수를 반환"""
return self.ptr
def is_empty(self):
"""스택이 비어 있는가?"""
return self.ptr <= 0
def is_full(self):
"""스택은 가득 찼는가?"""
return self.ptr >= self.capacity
일단 기본 예외처리와
스택의 데이터 갯수
비어있는지 가득 차있는지 확인하는 기능이 생겼다 ___
아직 기능 추가 할게 많다…
# 아까 작성하던 코드 아래에 이으면 된다
def push(self, value: Any) -> None:
"""스택에 value를 푸시"""
if self.is_full(): # 스택이 가득 참
raise FixedStack.Full
self.stk[self.ptr] = value
self.ptr += 1
def pop(self) -> Any:
"""스택에서 데이터를 팝(꼭대기 데이터를 꺼냄)"""
if self.is_empty(): # 스택이 비어 있음
raise FixedStack.Empty
self.ptr -= 1
return self.stk[self.ptr]
def peek(self) -> Any:
"""스택에서 데이터를 피크(꼭대기 데이터를 들여다 봄)"""
if self.is_empty(): # 스택이 비어 있음
raise FixedStack.Empty
return self.stk[self.ptr - 1]
def clear(self) -> None:
"""스택을 비움(모든 데이터를 삭제)"""
self.ptr = 0
데이터 푸시용 함수와
데이터 팝 함수
데이터 들여다보는 함수
모든 데이터 삭제 함수를 얻었다
# 마지막 마무리로 비유하자면 하반신이다.
def find(self, value: Any) -> Any:
"""스택에서 value를 찾아 첨자(없으면 -1)를 반환"""
for i in range(self.ptr - 1, -1, -1): # 꼭대기 쪽부터 선형 검색
if self.stk[i] == value:
return i # 검색 성공
return -1 # 검색 실패
def count(self, value: Any) -> bool:
"""스택에 포함되어있는 value의 개수를 반환"""
c = 0
for i in range(self.ptr): # 바닥 쪽부터 선형 검색
if self.stk[i] == value:
c += 1 # 들어 있음
return c
def __contains__(self, value: Any) -> bool:
"""스택에 value가 있는가?"""
return self.count(value)
def dump(self) -> None:
"""덤프(스택 안의 모든 데이터를 바닥부터 꼭대기 순으로 출력)"""
if self.is_empty(): # 스택이 비어 있음
print('스택이 비어 있습니다.')
else:
print(self.stk[:self.ptr])
선형검색을 통한 검색 기능
데이터 갯수 세는 기능
데이터 포함 여부도 확인 가능이다