코딩테스트

[묘공단] 2. 스택

미스터 한뺑 2023. 12. 17. 22:16
반응형

1-1. 스택

 - 스택의 어원은 "쌓는다"

 - 먼저 입력한 데이터를 제일 나중에 꺼낼 수 있는 자료구조 (선입선출)

 - 스택에 삽입하는 것은 push / 꺼내는 연산은 pop이라한다.

 - 정해진 방향으로 쌓을 수 있으며 top으로 정한 곳을 통해서만 접근 할수 있다. 자료 삭제도 top을 통해서 삭제가 가능하다.

 

 

1-2. 스택의 사용 사례

 

- 웹 브러우저 방문기록

-  실행 취소

- 역순 문자열 만들기

- 후위 표기법 계산

04-03. 후위 표기법(Postfix notation) #1 - 좌충우돌, 파이썬으로 자료구조 구현하기 (wikidocs.net)

 

04-03. 후위 표기법(Postfix notation) #1

[[TIP(문제 설명)]] 문자열 수식을 받아서 후위 표기법으로 바꾸는 함수를 작성하라. (단, 피연산자는 10 미만의 수이다.) * 입력: 3+5\*2, 출력: 35…

wikidocs.net

 

2. 스택의 ADT

 - ADT : 추상 자료형 - 인터페이스만 있고 실제로 구현은 되지 않은 자료형

 

2-1. 정의

- boolean isFull()

  • 스택에 들어 있는 데이터 개수가 maxsize인지 확인해 boolean값을 반환
  • 가득 차있다면 True / 아니면 False

- boolean isEmpty()

  • 스택에 들어 있는 데이터가 하난도 없는지 확인해 boolean값을 반환
  • 데이터가 하나라도 있으면 False / 아니면 True

- void push(Item Tpye item)

  • 스택에 데이터를 푸시

- ItemType pop()

  • 스택에서 최근에 푸시한 데이터를 pop하고 그 데이터를 반환

- Int pop

  • 스택에서 최근에 푸시한 데이터의 위치를 기록

- ItemType data[maxsize]

  • 스택의 데이터를 관리하는 배열.
  • 최대의 maxsize를 관리
stack =  [] #스택 리스트 초기화
maxsize = 10 #스택의 최대 크기

def isFull(stack):
  #스택이 가득 찼는지 확인하는 함수
  return len(stack) == maxsize

def isEmpty(stack):
  #스택이 비어있는지 확인
  return  len(stack) == 0

def push(stack, item):
  #스택에 데이터를 추가하는 함수
  if isFull(stack):
    print("스택이 가득 찼습니다.")
  else:
    stack.append(item):
    print("데이터가 추가되었습니다")

 

3. 몸풀기 문제

 

3-1. 괄호 짝 맞추기

 

  • 제약 조건
    • 열린 괄호는 자신과 가장 가까운 닫힌 괄호를 만나면 상쇄됩니다.
    • 상쇄 조건은 열린 괄호가 먼저 와야하고, 열린 괄호와 닫힌 괄호 사이에 아무것도 없어야 합니다
    • 더 상쇄할 괄호가 없을 때까지 상쇄를 반복합니다.
def solution(s):
  stack = []
  for c in s:
    if c =="(":
      stack.append(c)
    elif c ==")":
      if not stack:
        return False
      else:
        stack.pop()
  if stack:
    return False
  else:
    return True

 

 

3-2. 10진수를 2진수로 변환하기

 

def solution(s):
  stack = []
  while s > 0:
    r  = s % 2 
    stack.append(str(r))
    s // = 2
    binary = ""
    while stack:
      binary += stack.pop()
  return binary
반응형

'코딩테스트' 카테고리의 다른 글

[묘공단] 코딩테스트합격자되기_1.배열  (1) 2023.12.10