코딩테스트 기록/03. Stack

[백준] 4949: 균형잡힌 세상 (Pyhton)

박세류 2023. 11. 13. 17:37
 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

 

1. 문제 접근 방식

보통 이런 문제는 스택을 이용한 풀이가 정석이다.

 

2. 문제 풀이 - 스택 사용

blank = ['(', '[']
def check_len(stack):
    if len(stack) > 0:
        return True
    return False


while True:
    S = input().rstrip()
    if S == '.':
        break
    else:
        stack = list()
        for i in S:
            if i == ')':
                if check_len(stack) and stack[-1] == '(':
                    stack.pop()
                else:
                    stack.append(i)
            elif i == ']':
                if check_len(stack) and stack[-1] == '[':
                    stack.pop()
                else:
                    stack.append(i)
            elif i in blank:
                stack.append(i)
        if len(stack) > 0 :
            print('no')
        else:
            print('yes')

하지만, 파이썬의 문자열 처리의 사기성을 이용하여 문자열로 풀어버렸다.

 

3. 문제풀이 - 문자열 함수 사용

blank = ['(', ')', '[', ']']
com = ['()', '[]']

while True:
    S = input().rstrip()
    if S == '.':
        break
    else:
        A = list()
        for i in S:
            if i in blank:
                A.append(i)
        B = ''.join(A)
        while True:
            if com[0] in B:
                B = B.replace(com[0], '')
            elif com[1] in B:
                B = B.replace(com[1], '')
            else:
                break
        if len(B) > 0:
            print('no')
        else:
            print('yes')

 

 

4. 흠...

맨 위에 것이 스택으로 푼거고, 맨 아래것이 문자열로 푼 것인데, 오히려 문자열이 시간이 더 적게 나왔다.

출제 의도와는 다르나 자신만의 해답을 찾아 푸는것도 코딩'테스트' 에서는 강점이 될 수도 있겠다. 문제만 풀면 다음 스텝으로 넘어갈 수 있으니까 말이다. 

728x90

'코딩테스트 기록 > 03. Stack' 카테고리의 다른 글

[백준] 10828 스택 (Python)  (0) 2023.03.29