백준_균형잡힌 세상_python
2021. 8. 10. 23:41ㆍ코딩테스트
반응형
https://www.acmicpc.net/problem/4949
문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.
- 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다.
- 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다.
- 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
- 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
- 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.
정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.
k = dict()
k['('] = ')'
k['['] = ']'
while True:
ins = input()
if ins == '.':
break
status = "yes"
st = []
for s in ins:
if s == '[' or s == '(':
st.append(k[s])
elif s == ']' or s == ')':
if len(st) == 0 or s != st.pop():
status = "no"
break
if len(st) != 0 :
status = "no"
print(status)
[내코드]
여는 괄호를 key, 닫는 괄호를 value로 지정.
반복문 돌리면서 입력문자열을 한글자씩 괄호인지 확인.
괄호를 열기만 하고 닫는 괄호가 없을 경우(len(st) != 0)엔 균형잡힌 문자열이 아님
from sys import stdin, stdout
def isvalid(s):
stack = []
for c in s:
if c in '([':
stack.append(c)
elif c == ')':
if not stack or stack.pop() != '(':
return False
elif c == ']':
if not stack or stack.pop() != '[':
return False
return not stack
strings = stdin.readlines()
strings.pop()
for string in strings:
stdout.write("yes\n" if isvalid(string) else "no\n")
[다른사람코드]
stdin사용
+)
sys.stdin.readline().rstrip()
*한 두줄 입력받는 문제들과 다르게, 반복문으로 여러줄을 입력 받아야 할 때는 input()으로 입력 받는다면 시간초과 발생가능성있음
*rstrip : 줄바꿈 엔터가 기호로 변경됨. 이 공백문자를 제거
n, m, k = map(int, input().split())
n,m,k를 공백으로 구분하여 입력
반응형
'코딩테스트' 카테고리의 다른 글
프로그래머스_타겟 넘버_python (0) | 2021.08.13 |
---|---|
프로그래머스_체육복_python (0) | 2021.08.11 |
프로그래머스_카펫_python (0) | 2021.08.08 |
프로그래머스_소수찾기_python (0) | 2021.08.08 |
프로그래머스_H-Index_python (0) | 2021.08.08 |