취업 및 이직 준비/코딩테스트 준비

파이썬 코딩테스트 - 괄호짝 맞추기 - 참고용

code2772 2023. 4. 8. 12:02
728x90
반응형

 

def check_matching_brackets(s):
    stack = []  # 스택 초기화

    # 닫힌 괄호를 키(key)로, 여는 괄호를 값(value)으로 하는 딕셔너리
    brackets = {')': '(', '}': '{', ']': '['}

    for char in s:
        if char in brackets.values():
            # 여는 괄호일 경우 스택에 push
            stack.append(char)
        elif char in brackets.keys():
            # 닫는 괄호일 경우
            if not stack or brackets[char] != stack.pop():
                # 스택이 비어있거나, 짝이 맞지 않는 경우 False 반환
                return False
        else:
            # 괄호 이외의 문자는 무시
            continue

    # 스택에 남아있는 괄호가 없어야 짝이 맞음
    return not stack

# 입력 문자열 받아오기
input_str = input()

# 짝이 맞는지 판별
result = check_matching_brackets(input_str)

# 결과 출력
print(result)

1. 스택 데이터 구조를 사용하여 일치하는 괄호를 확인하는 논리

2. 사전을 올바르게 사용하여 닫는 괄호를 해당하는 여는 괄호에 매핑하고 입력 문자열을 문자별로 반복합니다.
3. 여는 괄호를 스택에 푸시하고 닫는 괄호를 만나면 꺼낸다.

4. 팝된 값이 사전의 해당 여는 괄호와 일치하는지 확인.

5. 닫는 괄호를 만났을 때 불일치가 있거나 스택이 비어 있으면 False를 반환

6. 그렇지 않으면 입력 문자열의 다음 문자로 계속
7. 마지막으로 입력 문자열의 모든 문자를 처리한 후 스택이 비어 있는지 확인

8. 스택이 비어 있으면 모든 여는 괄호에 일치하는 닫는 괄호가 있음을 의미하며 True를 반환, 그렇지 않으면 False를 반환

반응형