Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 22.04.02. 4949번 - 균형잡힌 세상 본문

Algorithm/BaekJoon

백준 22.04.02. 4949번 - 균형잡힌 세상

HappyFrog 2022. 4. 2. 22:29

while True:
    str = input()
    if str == '.':
        break
    br = []
    temp = True
    for i in str:
        if i == '(' or i == '[':
            br.append(i)
        elif i == ')':
            if not br or br[-1] == '[':
                temp = False
                break
            elif br[-1] == '(':
                br.pop()
        elif i == ']':
            if not br or br[-1] == '(':
                temp = False
                break
            elif br[-1] == '[':
                br.pop()
    if temp == True and not br:
        print('yes')
    else:
        print('no')

 

  • 우선 지문에서 ".'을 입력받으면 종료한다고 했기때문에 "."를 입력받았을 시 종료하도록 합니다.
  • 이어서 문자열을 입력받아 문자열의 요소들을 반복문을 돌려줍니다.
    • 만약 여는괄호"(" 또는 "["를 입력받았다면 br리스트에 저장합니다.
    • 만약 닫는괄호가 나왔다면 종류에 따라 두가지 경우로 나뉩니다.
      • 두가지 경우로 나뉘는 이유는 "( [ ] )"의 경우엔 문제가 없지만 "( [ ) ] "의 경우는 갯수는 같지만 균형을 이루지 않기때문에 닫는괄호가 ")"일 때와 "]"일 때 확인해야 하는 조건이 달라집니다.
    • 만약 닫는 괄호로 ")"가 주어졌다면 br에 저장된 가장 마지막 괄호는 같은 종류인 여는 소괄호 "(" 가 되어야 균형이 맞습니다.
      • 여는 소괄호 "("가 아닌 여는 중괄호 "["라면 문자열에서 괄호는 "[ )"가 되기때문에 균형이 맞지 않습니다.
    • 위와 같은 이유로 닫는괄호가 주어졌다면 br에 저장된 마지막 괄호가 같은 종류의 여는 괄호인지 확인해야합니다.
  • 위의 조건들에 어긋나거나 br에 저장된 괄호가 없는데(여는 괄호가 모두 짝을 이루거나 주어지지 않았을 때) 닫는 괄호가 주어졌다면 균형이 어긋난 것이므로 반복을 중단하고 no를 출력합니다.
  • 조건들을 모두 충족하며 temp가 True를 유지하며 br의 길이가 0이라면 괄호들이 모두 균형에 맞게 짝을 이룬 것이므로 yes를 출력합니다.