Algorithms
[BOJ] 스택문제 - 9012 괄호, 10828 스택, 10773 제로 Python3
devran
2023. 1. 27. 18:04
반응형
🔑 백준 괄호 9012
생각 정리
한 쌍의 괄호 ( , ) → ( 아무거나 ) = VPS 라고 부름
괄호가 열리고 닫혀야 YES!!
‘ ) ‘ 이걸로 문자열이 시작되면 안됨
‘ ( ’ 이걸로 문자열이 시작되는 경우의 수를 생각해보자,,
- ‘ ( ’ 이걸로 끝나면 어차피 안됨
- ‘ ) ’ 이걸로 끝나는 경우의 수 = 시작괄호 ’ ( ’ 끝괄호가 ‘ ) ’ 인 경우
- ‘ ( ’ 와 ‘ ) ’의 숫자가 동일해야 함
- ‘ ( ’ 일때 +1 , ‘ ) ’ 일때 -1 이라고 가정하자
- ((()) 일 경우, +1 → X
- (((()()()))) 일 경우, 0 → O
- ()) 일 경우, -1 → X
- 즉, 무조건 0이 나와야만 문제가 해결됨으로 카운트로 풀어낼 수 있을 듯하다. → 코드 1
스택 문제이기 때문에, ‘ ( ’일 경우 스택에 push 해주고 ‘ ) ’이 나올 경우 pop을 해주어서 마지막에 남는게 없도록 하면 더 쉽게 풀 수 있다. → 코드 2
코드 1
# 스택 사용하지 않고 풀이
import sys
t = int(input())
for _ in range(t):
input= sys.stdin.readline().rstrip()
sum = 0
for i in input:
if i == ('('):
sum += 1
elif i == (')'):
sum -= 1
if sum < 0 :
print('NO')
break
if sum > 0:
print('NO')
elif sum == 0:
print('YES')
코드 2
# 스택 사용해서 풀이
import sys
t = int(input())
for i in range(t):
input = sys.stdin.readline().rstrip()
stack = []
cnt = 0
for i in input:
if i == ('('):
stack.append(i)
elif i == (')'):
if stack: #스택이 있는경우
stack.pop()
else: #스택이 없는경우
print("NO")
break
else:
if not stack:
print("YES")
else:
print("NO")
🔑 백준 스택 10828
명령이라니!! 거만한 문제네, 명령!
어따 명령인것이니
생각정리
push: python 에서 stack이라는 빈 리스트를 선언한 후, append 사용
pop: list의 pop 사용
size: 리스트의 length 구하기
empty: 비어있으면 1, 아니면 0 출력 length로 구하면 될듯
top: list의 가장 뒤쪽 출력, 없으면 -1 출력
→ 대충 리스트 내장 기능들로 해결이 가능한것으로 보임
코드
import sys
def push(x):
stack.append(x)
def pop():
if not stack:
return -1
else:
return stack.pop()
def size():
return len(stack)
def empty():
if len(stack) == 0 :
return 1
else:
return 0
def top():
if not stack:
return -1
else:
return stack[-1]
# 첫째 줄에 주어지는 N
N = int(sys.stdin.readline().rstrip()) #rstrip=공백제거
stack = []
# N개에 줄에 주어지는 명령들
for _ in range(N):
input_split = sys.stdin.readline().rstrip().split()
order = input_split[0]
if order == "push":
push(input_split[1])
elif order == "pop":
print(pop())
elif order == "size":
print(size())
elif order == "empty":
print(empty())
elif order == "top":
print(top())
🔑 백준 제로 10773
웬일로 힌트도 주는 문제네 ,, 발전했구나 백준아
확실히 프로그래머스보다 기초부터 하기 좋지만, 정말,,,,, ㅜ 틀이 주어지는 게 좋단말이지~
문제 짜증난다 수학문제도 아니고 재현이가 사고를 많이 치네;;
생각정리
재현이가 숫자 잘못 부를 때 0을 외침 → 가장 최근에 쓴 수를 지움 pop()
재민이가 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 함
0이 아닌 숫자를 입력하면 자동으로 stack.append(숫자)
0을 입력할 시에는 stack.pop()
합은 sum을 이용하여 구하면 될듯하다!
코드
import sys
k = int(input())
stack = []
for i in range(k):
input = sys.stdin.readline().rstrip()
n = int(input)
if n == 0:
stack.pop()
else:
stack.append(n)
print(sum(stack))
진짜 간단하구나?!,,
반응형