내가 푼 답
req = list(input())
laser = []
laser_num = 0
stick = []
result = 0
for r in req:
if r == "(":
laser.append(r)
stick.append(r)
elif r == ")":
if laser:
laser = []
stick.pop()
laser_num += 1
else:
stick.pop()
result += (laser_num + 1)
if not stick:
laser_num = 0
print(result)
정답
req = list(input())
stack = []
result = 0
for i in range(len(req)):
if req[i] == "(":
stack.append(req[i])
else:
stack.pop()
if req[i-1] == "(":
result += len(stack)
else:
result += 1
print(result)
엄청 간단하게 푸는 문제였는데 거의 1시간 반동안 헤맴.... ㅠ...
리뷰하면, 레이저를 만나면 앞에 막대기 개수를 더해주고 레이저가 아닌 막대기의 끝이라면 마지막 막대기를 세주면 되는 식이다. 레이저로 인해 앞에 잘린 막대기 + 뒤에 남은 막대기
규칙성을 찾고 문제를 단순히 생각하는 게 중요한듯!
'개발계발 > 알고리즘' 카테고리의 다른 글
[1406] 에디터 #python (0) | 2020.09.21 |
---|---|
[11660] 구간 합 구하기5 #python (0) | 2020.09.21 |
[10866] 덱 #python (0) | 2020.09.21 |
[10845] 큐 #python (0) | 2020.09.21 |
[10815] 숫자 카드 #python (0) | 2020.09.21 |