[백준] 9012번 : 괄호 (파이썬)

뚝딱이 공학도·2022년 2월 18일
0

문제풀이_백준

목록 보기
63/160



문제




나의 답안

t=int(input()) #1. 테스트케이스 입력받기

for i in range(t): #2. 테스트 케이스 수 만큼 반복
    li=input()   #3. 괄호 문자열 입력 받기
    arr=[]	#4. 배열 초기화
    for j in li: #5. 입력받은 문자열의 문자 접근
        if j=="(": #6. 문자가 ( 라면
            arr.append(j) #배열에 추가한다. 
            
        elif j==")": # 7. 문자가 ) 라면
            if len(arr)!=0 and arr[-1] == "(":#8. 빈배열이 아니고, 배열의 마지막 값이 (인지 확인한다.
                arr.pop() #8-1. 맞다면, 마지막 문자열을 제거한다.(
            else:	#8-2. 아니라면 짝이 없다는 뜻이므로 ) 를 배열에 추가한다.
                arr.append(j)
                
    if len(arr)==0: #9. 배열이 빈 배열이라면 괄호문자열이라는 뜻이므로 yes
        print('YES')
    else:#아니라면, 짝이 안맞는다는 의미이므로 no
        print('NO')

접근 방법

  • '(' 와 ')'이 한 쌍을 이루어야 괄호 문자열이 된다.
  • 따라서, '(' 와 ')'의 개수가 일치해야 한다.
  • '(' 가 나오면 이를 배열에 append해주고
    ')'라면 쌍을 이루는지 여부에 따라 pop해주거나, append해주면 된다.
  • 배열의 길이가 0이라면 문자열이 괄호 문자열이라는 뜻이므로(전부 짝이 있기에 pop된 것) YES 출력, 아니라면 NO를 출력한다

  1. 테스트케이스 t를 입력받는다.
  2. 테스트 케이스 수 만큼 반복하고
  3. 괄호 문자열을 입력 받는다.
  4. 각 줄마다 새로운 문자열에 대한 검사를 진행하므로 배열을 초기화해준다.
  5. 각 문자열의 문자에 접근한다.
  6. 만약 ( 이라면 배열에 ( 를 추가한다.
  7. 만약 문자가 )이라면 조건을 나눠준다.
  8. 빈 배열이 아니고, 배열의 마지막 값이 ( 이라면 쌍을 이루는 것이므로 pop해주고, 아니라면 짝이 없다는 뜻이므로 )를 배열에 추가해준다.
  9. 최종적으로 배열이 빈 배열이라면 괄호 문자열이라는 뜻이므로 YES를 아니라면 NO를 출력한다.

(풀이를 보기좋게 하기 위해 주석을 달아보았다. 괜찮은지는 잘 모르겠다...)

0개의 댓글