For Programmer

백준 5432번 파이썬 문제풀이(쇠막대기 자르기) 본문

코팅테스트/백준 문제 모음

백준 5432번 파이썬 문제풀이(쇠막대기 자르기)

유지광이 2022. 2. 18. 12:35
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


 

이 문제 알면쉽고 모르면 생각을 꽤 하는 문제이다. 간단히 풀이방식은 '(' 을 만나면 현재 개수와 전체 개수를+1 씩 추가해주고 만약 레이저를 만나면 현재 저장된 개수를 그대로 전체개수에 한번더 추가해준다. 그리고 ')' 를 만날때 레이저가 아니라면 현재 개수를 -1 씩 해주는 식으로 문제를 풀었다.

 

import sys

sys.stdin = open('input.txt', 'r', encoding='UTF-8')


def solution():
    global total_count

    current_count = 0
    for i in range(len(raiser)):
        if raiser[i] == '(':
            if raiser[i + 1] != ')':  # 레이저가 아닐때
                current_count += 1
                total_count += 1
            else:  # 레이저 일때
                total_count += current_count
        else:  # ')' 일때
            if raiser[i - 1] != '(':  # 레이저가 아닐떄
                current_count -= 1


T = int(input())
for order in range(1, T + 1):
    raiser = input()

    total_count = 0

    solution()

    print(f'#{order} {total_count}')

-> 참고로 이문제 입력을 받아서 리스트로 처리하면 시간이 더욱 오래걸린다. 문자열로 처리하여 각 인덱스에 접근하는 것이 더 빠르게 풀린다.

728x90
Comments