https://www.acmicpc.net/problem/10799
문제
풀이
1. 레이저를 뜻하는 ')' 과 쇠막대기의 끝점임을 알리는 ')'의 구분이 필요한 문제여서 flag라는 변수에 직전에 나왔던 문자를 저장해줘서 i 이전에 나온 문자에 따라 레이저인지 쇠막대기인지 구분해주었다.
만일 flag에 '('가 저장되었을 경우에 i가 ')'이면 레이저를 뜻하고, flag에 ')'가 저장되었을 경우에 i가 ')'이면 쇠막대기의 끝점을 뜻한다.
2. 쇠막대기의 끝점이 등장하면 조각의 개수 1개를 추가해주고 stack에서 .pop()해준다.
3. 레이저가 등장하면 조각의 개수를 stack에 들어간 '('개수만큼 뽑아준다. (레이저를 뜻하는 '('를 계산이 안되게 .pop()해주고 계산해주세요)
코드
# 10799번 쇠막대기
li = input()
stack = []
ans = 0
flag = ""
for i in li:
if i == "(":
stack.append(i)
else:
# i가 인접한() 레이저일 경우
if flag == "(":
stack.pop()
ans += len(stack)
# i가 쇠막대기의 끝점일 경우 경우
elif flag == ")":
stack.pop()
ans += 1
flag = i
print(ans)
출력결과
'백준 > 스택 & 큐' 카테고리의 다른 글
[백준][Python] 1715번 카드 정렬하기 - 골드 4 (0) | 2024.03.18 |
---|---|
[백준][Python] 28278번 스택 2 - 실버 4 (0) | 2024.03.12 |
[백준][Python] 3986번 좋은 단어 - 실버 4 (0) | 2024.03.11 |
[백준][Python] 5397번 키로거 - 실버 2 (0) | 2024.03.10 |