728x90
문제
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
해결코드
#변수 할당
a = int(input())
for i in range(a):
b = int(input())
s = list(b)
#변수 초기화
sum = 0
for i in s:
#여는 괄호가 나오면
if i == '(':
#+1을 해주고
sum += 1
#닫는 괄호가 나오면
elif i == ')':
#-1을 해준다
sum -= 1
#닫는 괄호가 여는 괄호보다 많다면
if sum < 0:
print('NO')
break
#여는 괄호가 닫는 괄호보다 많다면
if sum > 0:
print('NO')
#닫는 괄호의 개수 == 여는 괄호의 개수라면
elif sum == 0:
print('YES')
이 문제를 풀면서 'break'부분의 두번째 위에 'if sum<0'이 나오고 뒤에 'if sum<0'을 검증하는 코드가 나오면 정답이 되고 순서가 바뀌면 오답이 되는데 아직도 명확하게 이해하지는 못했다..(나는 둘다 상관없이 정답이 되어야 한다고 생각)
우선 이해한 논리는 '('로 시작했으니 +된 상태로 끝날 확률이 더 높다는 점....?
나중에 문제를 더 풀고 이 문제에 돌아오면 좀 더 이해할 수 있을거라고 생각한다
숏코딩
for _ in range(int(input())):
b = input()
while '()' in b:
#같은 쌍을 아예 삭제함
b = b.replace('()','')
print("NO" if b else "YES")
처음에 이 문제를 보고 '('와 ')'의 개수를 대조해야하는데 코드로 인식하는지도 몰라서 이게 되는지 궁금했다
숏코딩이 손코딩한다면 이렇게 풀이할거라고 생각하면서 해결한 코드이다
재미있는 문제였다
'프로그래밍 > 알고리즘' 카테고리의 다른 글
백준 11399 - ATM 파이썬 (0) | 2022.12.01 |
---|---|
백준 1260- DFS와 BFS 파이썬 (0) | 2022.11.30 |
백준 1002번 터렛 파이썬 (0) | 2022.11.28 |
프로그래머스 - A로 B 만들기 파이썬 (0) | 2022.11.25 |
프로그래머스 - 로그인 성공? 파이썬 (0) | 2022.11.24 |
댓글