list() 함수 이용
string = 'I became a zombie'
list(string)# 공백을 포함 한 문자씩 모두 나눔
list()
함수에 문자열을 넣으면 한 문자씩 다 나누어 리스트를 생성 (공백도 한 문자로 취급)
split()함수 이용
string.split()
문자열에 대해 공백을 구분자로 나누어 리스트를 생성
str = [] # str은 빈 리스트입니다.
str = input() # str은 문자열로 변환됩니다.
따라서 str = list(input())
과 같은 형식으로 리스트를 선언하는 것이 좋음
import sys
str = list(sys.stdin.readline().strip())
sys.stdin.readline()
뒤에 strip()
을 붙이면 된다
(
가 문자열에서 나오면 stack에 추가)
가 문자열에서 나오면 stack에 있는 (
pop하기)
만났을 때 문자열이 비어있거나, 문자열이 끝났을 때 stack이 차있다면 올바른 괄호 문자열(VPS)이 아닌 것import sys
n = int(sys.stdin.readline())
for _ in range(n):
str = list(sys.stdin.readline().strip())
st = []
for x in str:
if x == "(":
st.append(x)
else:
if len(st)==0: #")"만났는데 stack이 비어있는 경우
print("NO")
else:
st.pop()
if len(st) == 0:
print("YES")
else: #stack이 차있는 경우
print("NO")
6
(())())
NO
YES
다음과 같은 경우 str[-2]까지 stack이 비어있고, stack[-1]이 )
이므로 print(”NO”)가 나옴. 하지만, 스택이 비어있으므로 마지막 if문에서 YES가 출력이됨
for x in str:
if x == "(":
st.append(x) # stack이 차있는 경우와 상관 없이 "("만난 경우
else:
if len(st)==0: #")"만났는데 stack이 비어있는 경우
print("NO")
**break**
else:
st.pop() # ')'만났고, (가 있다면
if len(st) == 0: #str이 끝났는데 stack비어있음
print("YES")
else: # str 끝났는데 stack이 차있는 경우
print("NO")
break를 추가했지만 len(st)==0 스택이 비어있는지 아닌지 여부를 확인하는 if문이 for문 밖에 있어 도움이 되지 않음
파이썬에서는 반복문에도 else 사용가능 그래서 while-else
도 존재
for x in [1, 2, 3, 4]:
if x % 3:
print(x) # x가 3의 배수가 아니면 출력
else:
print("for문 탈출")
break # x가 3의 배수이면 반복문에서 빠져나감
else:
print("리스트의 원소를 모두 출력했어요")
>>> 1
>>> 2
>>> for문 탈출
import sys
n = int(sys.stdin.readline())
for _ in range(n):
str = list(sys.stdin.readline().strip())
st = []
for x in str:
if x == "(":
st.append(x)
else:
if len(st) == 0: #")"만났는데 stack이 비어있는 경우
print("NO")
break
else:
st.pop()
else:
if len(st)==0:
print("YES")
else:
print("NO")