일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- 백준
- to shp
- 셀레니움
- NLP
- string to list
- 인스타그램
- Python
- 해시태그
- 파이썬
- clustering
- 괄호 문제
- convert to shp
- 플라스크
- 웹페이지
- python buildpacks
- geoDataFrame
- colab runtime
- 2164 카드2
- geopandas
- Merge Repositories
- kmeans
- Crawling
- plotly dash
- Selenium
- flask
- 크롤링
- 혁신성장부문
- 코랩 런타임
- Chat-GPT
Archives
- Today
- Total
코딩코딩코딩
백준(BAEKJOON) 9012 괄호 - 파이썬 본문
< 풀이 방법 >
Stack 활용
* Stack은 LIFO(Last In First Out)의 형태를 갖는 자료구조
- Push, Pop 등의 메서드 이용
< 접근 방법 >
1. 입력받은 문자열을 앞에서부터 순차적으로 하나씩 접근
* 문자열은 크게 여는 괄호 "(", 닫는 괄호 ")" , 기타(문자) 로 이루어져 있음
2.
(1) stack을 만들어두고 "("가 나오면 하나씩 push
- 파이썬에서는 리스트의 append, pop을 활용하면 됨
(2) last_check = 0 이라는 변수를 만들어 둠 --> 마지막에 닫는 괄호 ")" 가 오는 경우 대비
3. ")" 가 나왔을 때 스택에서 하나씩 pop함 --> 담아뒀던 여는 괄호 "("가 하나씩 빠짐
- 예외 상황
- stack이 비어있는 경우
- 입력받은 문자열을 순회하는 for문을 break해서 끝냄
- 마지막에 닫는 괄호 ")" 가 오는 경우
- 2-(2)에서 만들어 둔 last_check를 변경
4. 문자열을 순회하는 for문이 종료된 후
stack이 비어있지 않거나 / last_check가 처음 만든 0과 동일하지 않으면 "NO"를 출력함
그 외의 경우 "YES" 출력
< 코드 >
iter_num = int(input())
for each_iter in range(iter_num):
paranthesis = input()
stack_list = []
last_check = 0 # 마지막에 ")"가 오는 경우 대비
for str_idx in range(len(paranthesis)):
each_str = paranthesis[str_idx]
if each_str == "(":
stack_list.append(each_str)
elif each_str == ")":
if not stack_list: # 리스트 비어있을 경우
last_check += 1
break
else:
stack_list.pop()
else:
continue
if (len(stack_list) != 0) or last_check != 0:
print("NO")
else:
print("YES")
21.12.27일 다시 풀어본 코드
import sys
# vps: Valid Paranthesis String
num = int(sys.stdin.readline())
for _ in range(num):
target = list(sys.stdin.readline().strip())
temp = [] # 입력 괄호 문자열 확인용 빈 스택
# "(" 이면 스택에 추가
# 스택이 비어있지 않을 때 ")" 이면 스택 pop, 스택이 비어있을 때면 break, not vps
for x in target:
if x == "(":
temp.append(x)
else:
if len(temp) == 0:
temp.append(x)
break
else: temp.pop()
if len(temp) == 0:
print("YES")
else: print("NO")
'파이썬 > Algorithms' 카테고리의 다른 글
백준(BAEKJOON) 1110 더하기 사이클 - 파이썬(python) (0) | 2021.04.27 |
---|---|
백준(BAEKJOON) 1181 단어정렬 - 파이썬(python) (0) | 2021.04.12 |
백준(BAEKJOON) 2164 카드2 - 파이썬(python) (0) | 2021.04.10 |
백준(BAEKJOON) 1966 프린터큐 (0) | 2021.02.13 |
백준(BAEKJOON) 1052 단어의 개수 (0) | 2021.01.15 |
Comments