[백준] 9012 - 괄호 (Python, 숏코딩 포함)
- Programming/알고리즘
- 2022. 4. 19.
* 일반 풀이와 숏코딩 풀이
## 일반 풀이
T = int(input()) ## 테스트케이스
for _ in range(T):
brk_list=list(input()) ## 괄호 리스트
pair_check=0
for brk in brk_list:
if brk == '(':
pair_check+=1
elif brk ==')':
pair_check-=1
if pair_check < 0:
print("NO")
break
if pair_check > 0:
print("NO")
elif pair_check==0:
print("YES")
## 숏코딩 풀이
for _ in range(int(input())):
b=input()
while '()' in b:
b=b.replace('()','')
print("NO" if brk else "YES")
문제 정의
문제에서 입력으로 반복할 테스트 케이스 수 T가 주어지고, 다음 줄부터 T 줄 만큼 괄호 문자열이 한 줄씩 주어집니다. 모든 괄호의 쌍이 맞으면 YES를, 쌍이 맞지 않으면 NO를 출력합니다.
예제 입력 및 출력
일반 풀이와 숏코딩 풀이
일반 풀이
## 일반 풀이
T = int(input()) ## 테스트케이스
for _ in range(T):
brk_list=list(input()) ## 괄호 리스트
pair_check=0
for brk in brk_list:
if brk == '(':
pair_check+=1
elif brk ==')':
pair_check-=1
if pair_check < 0:
print("NO")
break
if pair_check > 0:
print("NO")
elif pair_check==0:
print("YES")
테스트 케이스를 정수로 T만큼 입력받고, for문으로 반복합니다. 각 반복에서, 괄호를 리스트 형태로 받아 brk_list에 저장합니다. 쌍이 맞는지 체크하는 변수 pair_check=0으로 초기화합니다. brk_list의 요소를 brk로 반복하며, '('로 시작하는 경우 pair_check+=1을 해주고, ')'로 끝나는 경우 pair_check-=1을 해줍니다. 만약, pair_check <0이라면 괄호 쌍에 맞지 않게 ')'가 한번 더 나온 경우입니다. 이런 경우 NO를 출력하고 break를 합니다. brk_list를 모두 반복하고, pair_check>0이라면, 괄호 쌍이 맞지 않게 '('가 더 많은 경우입니다. 역시 NO를 출력하고, pair_check가 0인 경우는 모든 괄호 쌍이 맞는 경우이므로, YES를 출력합니다.
숏코딩 풀이
## 숏코딩 풀이
for _ in range(int(input())):
b=input()
while '()' in b:
b=b.replace('()','')
print("NO" if brk else "YES")
테스트 케이스를 T로 받지 않고, 바로 for 문 range안에 받아 반복합니다. 각 반복에서, 괄호 문자열을 b에 저장합니다. 이 숏코딩의 핵심은 b에 '()'가 존재하는 동안 계속 반복하며 '()'를 제외하는 부분입니다. 만약 괄호가 '(())()' 라면, 첫 while문에 b.replace('()', '')를 통해 b가 '(())()'에서 빨간 부분이 제외되어 '()'가 될 것입니다. 여전히 '()'가 b에 존재하므로, 다음 while 반복에서 '()'가 제외되어 b는 빈 문자열 ''이 됩니다. 빈 문자열은 False취급을 받으므로 print의 삼항 연산에서 YES가 출력됩니다.
읽어주셔서 감사합니다.
오늘도 유익하셨길 바랍니다.
다음에 더 유익하고 재미있는 포스팅으로 찾아오겠습니다.
* 아래 깃허브에 해당 풀이를 정리해 두었습니다.
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 14248 점프 점프 - Python (그래프 탐색) (0) | 2022.07.16 |
---|---|
[백준] 1541 - 잃어버린 괄호 (Python, 숏코딩 2가지) (0) | 2022.04.24 |
[백준] 1003 - 피보나치 함수 (Python, 숏코딩 포함) (1) | 2022.04.18 |
[백준] 1343 - 폴리오미노 (Python, 숏코딩 포함) (0) | 2022.04.13 |
[백준] 2800 - 괄호제거 (Python, combinations) (0) | 2022.04.01 |