코딩테스트/백준

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

내만 2022. 8. 30. 09:50
728x90
반응형

반응형

 

 

 

 

 

 

🙆‍♂️문제


 

🙋‍♂️풀이


괄호를 통해서 막대기수와 레이저 수를 구해서 풀어야 합니다.

스택 구조를 이용해서 풀 수 있습니다.

 

🚀 입력받기


import sys
msg = list(sys.stdin.readline())

 

먼저 괄호들을 하나하나 문자로 입력받아 msg 리스트에 저장합니다.

 

🚀 문제 풀이 핵심


br = []; total = 0
for i,v in enumerate(msg):
    if v == '(':
        br.append('(')
    elif v == ')':
        if msg[i-1] == '(':
            br.pop(-1)
            total += len(br)
        else:
            br.pop(-1)
            total+=1

br리스트를 스택으로 사용하고 total 변수에 모든 값을 저장합니다.

enumerate를 사용해서 msg리스트의 인덱스와 값 둘다 접근할 수 있도록 하고

값이 여는 괄호' ( ' 가 들어온다면 별 다른 코드 없이 스택에 ( 를 쌓아 줍니다.

반대로 닫는 괄호 ' ) '가 들어온다면 두 가지 경우로 나뉩니다.

1. 전에 입력 값이 여는 괄호 ' ( '인 경우와

2. 전에 입력이 닫는 괄호 ' ) '인 경우 입니다.

 

1번 경우에는 스택에서 마지막 괄호를 지우고 total 값에 스택의 길이를 넣습니다.

이는 레이저로 인해 생기는 막대기 수를 의미합니다.

 

2번 경우에는 스택에서 마지막 괄호를 지우고 total값에 1을 추가합니다.

이는 원래 있어야 할 막대기 수를 의미합니다.

 

 

🚀 출력하기


print(total)

계산된 total값을 출력합니다.

728x90

728x90
반응형

'코딩테스트 > 백준' 카테고리의 다른 글

[백준][Python] 17299. 오등큰수  (0) 2022.09.05
[백준][Python] 17298. 오큰수  (0) 2022.08.30
[백준][Python] 1264. 모음의 개수  (1) 2022.08.29
[백준][Python] 10866. 덱  (0) 2022.08.29
[백준][Python] 4101. 크냐?  (0) 2022.08.24