문제 소스: https://www.acmicpc.net/problem/4949
내가 작성한 코드:
list=[]
while True:
sentence = input()
# 종료 조건
if (sentence=='.'):
break
list.append(sentence)
# for i in range(len(list)):
# print(list[i])
for i in range(len(list)):
stack=[]
for j in range(len(list[i])):
if list[i][j] == '(' or list[i][j]=='[':
stack.append(list[i][j])
elif list[i][j] == ')':
# 이전에 ( 이 있다면
if stack and stack[-1] == '(':
stack.pop() # ( 삭제
elif list[i][j] == ']':
# 이전에 [ 이 있다면
if stack and stack[-1] == '[':
stack.pop() # [ 삭제
if not stack:
print('yes')
else:
print('no')
결과 : 틀렸습니다
테스트 케이스는 다 맞는데, 어느 부분에서 틀린지 검토해 봐야함 -221004
원인 : 모든 문장을 입력 받은 후 처리가 아닌,
각 문장 당 입력 및 처리였음..
그에 따라 2차원에서 1차원 리스트로 코드를 줄였다.
개선 코드
while True:
list = input()
# 종료 조건
if (list=='.'):
break
stack=[]
for i in list:
if i == '(' or i=='[':
stack.append(i)
elif i == ')':
# 이전에 ( 이 있다면
if stack and stack[-1] == '(':
stack.pop() # ( 삭제
# 이전에 ( 이 없다면
else:
stack.append(i)
elif i == ']':
# 이전에 [ 이 있다면
if stack and stack[-1] == '[':
stack.pop() # [ 삭제
# 이전에 [ 이 없다면
else:
stack.append(i)
if not stack:
print('yes')
else:
print('no')
해결 완료
'코딩테스트 > 백준' 카테고리의 다른 글
[백준2178][c++] 미로 찾기 (0) | 2023.04.17 |
---|---|
[백준10828][c++] 스택 (0) | 2023.04.16 |
[백준17298][c++] 오큰수 (0) | 2023.04.16 |
[백준1159][c++] 농구 경기 (0) | 2023.04.14 |
[백준10988][c++] 팰린드롬인지 확인하기 (0) | 2023.04.14 |