[Python-CodingTest] 5-2. 쇠막대기 (스택)
쇠막대기
문제 정리
입력
()(((()())(())()))(())
처리 과정
- 입력을 스트링 변수(
str
)에 받기 - 빈 스택 리스트를 생성
- 여는 괄호를 만나면 무조건 스택에 넣기
- 닫는 괄호를 만났을 때에는 두가지 경우가 있음
str
에서 해당 닫는 괄호 바로 이전 문자가 여는 괄호였을 때: 레이저 ->cnt+=len(stack)
(쇠막대기는 쌓여있기 때문에 스택에 있는'('
의 수(=겹쳐있는 쇠막대기의 수)만큼cnt
에 누적)str
에서 해당 닫는 괄호 바로 이전 문자가 여는 괄호가 아닐 때: 쇠막대기의 끝 ->cnt+=1
(막대기의 마지막 조각(1개)을cnt
에 누적)
출력
17
내 답
import sys
sys.stdin = open("./input/in2.txt", "rt")
lst=list(map(str,input()))
stack=[]
cnt=0 # 쇠막대기 조각의 개수
# 리스트의 인덱스와 value를 둘 다 알고싶을 때는 enumerate
for i,x in enumerate(lst):
if x=='(': # 여는 괄호는 무조건 스택에 넣기
stack.append(x)
else: # 닫는 괄호를 만났을 때 주의!
if lst[i-1]=='(': # 레이저인 경우
stack.pop()
cnt+=len(stack) # 스택에 있는 여는 괄호의 수만큼 cnt에 누적
else: # 막대기가 끝난 지점
stack.pop()
cnt+=1 # 막대기의 마지막 조각(1개)을 cnt에 누적
print(cnt)
풀이
import sys
sys.stdin = open("./input/in2.txt", "rt")
str=input() # 스트링 변수
stack=[]
cnt=0 # 쇠막대기 조각의 개수
for i in range(len(str)):
if str[i]=='(': # 여는 괄호는 무조건 스택에 넣기
stack.append(str[i])
else: # 닫는 괄호를 만났을 때 주의!
stack.pop()
if str[i-1]=='(': # 레이저인 경우
cnt+=len(stack) # 스택에 있는 여는 괄호의 수만큼 cnt에 누적
else: # 막대기가 끝난 지점
cnt+=1 # 막대기의 마지막 조각(1개)을 cnt에 누적
print(cnt)
정리
enumerate
: 리스트의 인덱스와 value 모두에 접근 가능- 🧐 쇠막대기 문제 논리
💛 개인 공부 기록용 블로그입니다. 👻