풀이
() : 무조건 레이저
스택 이용
틀린 수도코드
if ( : 스택에 ( 넣기
if 스택의 맨마지막이 ( : 스택에 ( 넣기
else 스택의 맨마지막이 ) : 스택에 ( 넣기
else ) :
if 스택의 맨마지막이 ( : 스택에서 ( 빼고나서 스택에 쌓여있는 ( 개수만큼 더해주기
else 스택의 맨마지막이 ) : 스택에서 ( 빼고 count +1
틀린 코드
string = input()
n = list(string)
stack = []
cnt = 0
for i in n:
if i=='(':
stack.append(i)
else: # i==')'
if stack[-1] == '(': # 스택의 맨 마지막이 (
stack.pop()
cnt += len(stack)
else : # 스택의 맨 마지막이 )
stack.pop()
cnt += 1
print(cnt)
( () () ) 의 답은 3이다.
위의 코드가 틀린 이유는 else 문에서
스택의 맨 마지막이 '(' 일 때로 받았기 때문이다.
즉 stack[-1] == '(' 로 조건문을 받았기 때문이다.
제일 마지막 ) 괄호에서 스택에는 ( 만 남아있다.
그러면 else 문에서 ( ) 로 받고, 스택에서 ( 를 빼고나서 스택에 쌓여있는 ( 개수만 더해주므로 0을 더해줘서 count가 되지 않는다.
따라서 else 문에서
스택이 맨 마지막이 '(' 일 때로 받지 말고, 문자열 또는 리스트의 i-1 번째가 '(' 일 때로 받아야 한다.
코드
string = input()
n = list(string)
stack = []
cnt = 0
for i in range(len(n)):
if n[i]=='(':
stack.append(i)
else: # i==')'
if n[i-1] == '(': # 스택의 맨 마지막이 (
stack.pop()
cnt += len(stack)
else : # 스택의 맨 마지막이 )
stack.pop()
cnt += 1
print(cnt)
'⏰ 코딩테스트 > 자료구조 활용' 카테고리의 다른 글
응급실(큐) (0) | 2021.10.21 |
---|---|
공주 구하기(큐) (0) | 2021.10.20 |
후위식 연산(스택) (0) | 2021.10.19 |
후위표기식 만들기(스택) (0) | 2021.10.18 |
가장 큰 수(스택) (0) | 2021.10.14 |