카테고리 없음
[코딩 테스트 합격자 되기 - 3주차] 스택
난쟁이 개발자
2024. 1. 20. 16:28
반응형
스택 개념
선입후출 또는 FILO(First In Last Out) : 먼저 입력한 데이터를 제일 나중에 꺼낼 수 있는 자료구조.
스택 정의
스택은 ADT(abstract data type) - 추상 자료형이며, 인터페이스만 있고 실제로 구현은 되지 않은 자료형
파이썬의 경우, 스택을 제공하지 않지만 대안으로 리스트 메서드인 append() 메서드, push() 메서드로 스택을 대체 가능
deque는 한 쪽으로만 데이터 삽입, 삭제할 수 있는 스택과 다르게 양 쪽에서 데이터를 삽입하거나 삭제할 수 있는 자료구조
이런 특징을 조금만 응용하면 스택처럼 사용할 수 있음.
스택 구현하기
더보기
stack = [] # 스택 리스트 초기화
max_size = 10 # 스택의 최대 크기
def isFull(stack) :
# 스택이 가득 찼는지 확인하는 함수
return len(stack) == max_size
def isEmpty(stack) :
# 스택이 비어 있는지 확인하는 함수
return len(stack) == 0
def push(stack, item) :
# 스택에 데이터를 추가하는 함수
if isFull(stack) :
print("스택이 가득 찼습니다.")
else :
stack.append(item)
print("데이터가 추가되었습니다.")
def pop(stack) :
# 스택에서 데이터를 꺼내는 함수
if isEmpty(stack) :
print("스택이 비어 있습니다.")
return None
else :
return stack.pop()
# 스택에 데이터 추가
stack.append(1)
stack.append(2)
stack.append(3)
# 스택에서 데이터 꺼냄
top_element = stack.pop()
next_element = stack.pop()
# 스택의 크기를 구함
stack_size = len(stack)
print("stack",stack) # stack [1]
print("top_ :", top_element) # top_ : 3
print("next_ :", next_element) # next_ : 2
print("size :", stack_size) # size : 1
몸풀기 문제 - 08. 괄호 짝 맞추기
더보기
def solution(s) :
stack = [] # 스택 초기화
for i in range(len(s)) :
if s[i] == '(' :
stack.append(s[i])
else :
if '(' in stack : # stack 에 '(' 이 있다면
stack.pop()
else : # stack에 '(' 이 없다면
return False
if len(stack) == 0 : # 쌍이 알맞게 구성되었다면
return True
return False # 아니라면,
s = "(())()"
print(solution(s)) # True
s = "((())()"
print(solution(s)) # False
몸풀기 문제 - 09. 10진수를 2진수로 변환하기
더보기
# 10진수를 2진수로 변환하기
def solution(decimal) :
stack = []
while decimal > 0 :
n = decimal % 2 # decimal 을 2로 계속 나누고 그에 대한 나머지 값을 구함
stack.append(str(n))# 나머지 값을 stack에 추가
decimal //= 2 # 2로 나눈 decimal 값으로 초기화
stack.reverse()
return ''.join(stack)
de = 10
print(solution(de)) # 1010
de = 27
print(solution(de)) # 11011
de = 12345
print(solution(de)) # 11000000111001
'''
10진수를 2진수로 변환하는 과정을 살펴보면,
10은 10, 5, 2, 1, 0의 몫을 얻고
나머지는 0, 1, 0, 1 을 얻게 된다.
이를 뒤집어 읽으면 10에 대한 2진수를(1010)을 얻을 수 있다.
'''
합격자가 되는 모의 테스트 문제 10. 괄호 회전하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
더보기
def solution(s):
answer = 0
n = len(s)
for i in range(n) :
stack = []
for j in range(n) :
c = s[(i + j) % n]
if c == '(' or c == '{' or c == '[' :
stack.append(c)
else :
if not stack :
break
if c == ')' and stack[-1] == '(' :
stack.pop()
elif c == '}' and stack[-1] == '{' :
stack.pop()
elif c == ']' and stack[-1] == '[' :
stack.pop()
else :
break
else :
if not stack :
answer += 1
return answer
s = "[](){}"
print(solution(s))
s = "}]()[{"
print(solution(s))
s = "[)(]"
print(solution(s))
s = '}}}'
print(solution(s))
반응형