개발계발/알고리즘

[10799] 쇠막대기 #python

냥냥친구 2020. 9. 21. 23:30

내가 푼 답

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