[백준] 9012번 : 괄호 (파이썬)
문제
나의 답안
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를 출력한다
- 테스트케이스 t를 입력받는다.
- 테스트 케이스 수 만큼 반복하고
- 괄호 문자열을 입력 받는다.
- 각 줄마다 새로운 문자열에 대한 검사를 진행하므로 배열을 초기화해준다.
- 각 문자열의 문자에 접근한다.
- 만약 ( 이라면 배열에 ( 를 추가한다.
- 만약 문자가 )이라면 조건을 나눠준다.
- 빈 배열이 아니고, 배열의 마지막 값이 ( 이라면 쌍을 이루는 것이므로 pop해주고, 아니라면 짝이 없다는 뜻이므로 )를 배열에 추가해준다.
- 최종적으로 배열이 빈 배열이라면 괄호 문자열이라는 뜻이므로 YES를 아니라면 NO를 출력한다.
(풀이를 보기좋게 하기 위해 주석을 달아보았다. 괜찮은지는 잘 모르겠다...)
Author And Source
이 문제에 관하여([백준] 9012번 : 괄호 (파이썬)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yj_lee/백준-9012번-괄호-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)