백준_균형잡힌 세상_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를 공백으로 구분하여 입력

 

 

반응형