본문 바로가기
알고리즘/BOJ

[BOJ] 4949번 균형잡힌세상 / 사용언어 : 파이썬(python)

by 바른 호랑이 2021. 12. 17.
728x90
반응형

※ 문제링크

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

※ 기본문제

 

[BOJ] 10828번 스택 / 사용언어 : 파이썬(python)

※ 문제링크 : https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서

data-is-power.tistory.com

※ 문제풀이

while True:
    check_list = []
    sentence = input()
    if sentence != '.':
        k = 0
        while k != len(sentence):
            if sentence[k] == '(' or sentence[k] == ')' or sentence[k] == '[' or sentence[k] == ']':
                if len(check_list) > 0:
                    if check_list[-1] + sentence[k] == '()'or check_list[-1] + sentence[k] == '[]':
                        check_list.pop()
                    else:
                        check_list.append(sentence[k])
                else:
                    check_list.append(sentence[k])
            k += 1
        if len(check_list) == 0:
            print('yes')
        else:
            print('no')
    else:
        break

 

해당문제는 스택을 활용하여 푸는 문제였다. 생각했던 문제풀이 방법은 아래와 같았다.

1. 종료문자 '.'가 들어올때까지 조건문 반복/ 종료문자가 들어오면 break로 반복문 종료

2. 문자열내부의 괄호문자를 저장할 리스트 생성 후 반복하며 괄호의 정상여부 확인

3. 들어온 문자열을 처음부터 끝까지 탐색하며 '()' 또는 '[]'형성되면 괄호문자리스트에서 해당 문자 삭제

4. 반복문 종료 후 괄호문자리스트에 값이 존재하면 'no'를 값이 없으면 'yes'를 출력

코드 작성 후 실행을 해보니 문제없이 정상적으로 작동하는 것을 확인하였다.

 

P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글