For Programmer
백준 5432번 파이썬 문제풀이(쇠막대기 자르기) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm
이 문제 알면쉽고 모르면 생각을 꽤 하는 문제이다. 간단히 풀이방식은 '(' 을 만나면 현재 개수와 전체 개수를+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
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 4408번 파이썬 문제풀이(자기 방으로 돌아가기) (0) | 2022.02.18 |
---|---|
백준 1859번 파이썬 문제풀이(백만장자 프로젝트) (0) | 2022.02.18 |
백준 5789번 파이썬 문제풀이(현주의 상자 바꾸기) (0) | 2022.02.18 |
백준 2004번 파이썬 문제풀이(조합 0의 개수) (0) | 2022.02.17 |
백준 15996번 파이썬 문제풀이(팩토리얼 나누기) (0) | 2022.02.17 |
Comments