[Python][백준] 10799번 쇠막대기

신남·2023년 1월 18일

https://www.acmicpc.net/problem/10799

공부 날짜 : 2023.01.18
정답 참조 여부 : x

쇠막대기를 레이저로 자르는 상황이 괄호로 표현될때, 절단이후 막대기 개수를 구하는 문제이다.


스택이라는 개념을 알고나니까 문제를 바라보는 시점이 조금 달라진거 같다.

기존에는 어떻게 풀어야겠다~ 느낌이었는데 스택을 알고나니 이 문제가 스택을 요구하고, 스택의 방법을 생각하니까 어떻게 풀어야 하는지 좀 더 빠르게 접근한거 같다.

문제를 푼 방법은

괄호가 열리면 일단 막대기로 보고 잘려야 하는 막대의 개수를 +1 해줬다.

그 다음 괄호가 닫힐 때 레이저괄호라면 막대의 개수를 빼주고 잘린 막대의 수 만큼 정답에 더해줬다.

괄호가 닫힐 때 막대기 끝을 의미하는 괄호라면 잘려야 하는 막대의 개수를 -1 해주고 정답 변수에 +1 해주는 식으로 구현했다.

소스코드

import  sys
input = sys.stdin.readline
######################################################
input_data = input().rstrip()


stick = 1
answer = 0

#시작은 항상 괄호가 열렸다고 생각
#그래서 stick와 answer이 1로 시작
for i in range(1, len(input_data)):

    #괄호가 열리면 현재 스틱 1개 추가
    if input_data[i] == "(":
        stick += 1

    #괄호가 닫혔을때
    elif input_data[i] == ")":
        #그 괄호가 레이저 괄호이면 잘려진 막대 추가
        if input_data[i-1] == "(":
            stick -= 1
            answer += stick

        #그 막대가 막대 괄호이면 막대개수 1감소
        #막대의 마지막 파츠 1개 추가
        else:
            stick -= 1
            answer += 1


print(answer)

0개의 댓글