"""
올바른 괄호인지 판단하기
본 문제에서는 입력으로 주어지는 괄호가 올바른 괄호인지를 판단하는 프로그램을 작성합니다.

예를 들어, ‘(())’ 은 올바른 괄호이지만, ‘(()))‘, 혹은 ‘(()()(’ 는 올바른 괄호가 아닙니다.

입력
괄호 pp가 주어집니다.

출력
pp가 올바른 괄호이면 YES, 그렇지 않으면 NO를 출력합니다.

입력 예시 1
(())()
출력 예시 1
YES
입력 예시 2
(((())())(()())((())()))
출력 예시 2
YES
입력 예시 3
(())())()
"""

#My Code
def proper(p):
    if len(p.replace("(", "")) != len(p)/2:
        return "No"
    # 괄호가 정상적인 상태일 경우 "("를 모두 제외하면 원래 길이의 반이 될것이다."
    else:
        while p.replace("()", "") != p:
            p = p.replace("()","")
        # 정상적인 괄호를 안쪽에서부터 제거한다. (원래의 문장과 같아질때까지)
        ## 괄호를 제거해도 원래의 문장과 같아진다면 제거가 끝났거나 더이상 제거가 불가능한 상태일 것이다.
        if len(p) == 0:
            return "Yes"
        # 모두 제거된 경우
        else:
            return "No"
        # 잘못된 괄호가 남아서 더이상 제거가 안되는 경우
