일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- leetcode
- docker image
- 백준 온라인 저지
- Pseudo Lab
- 알고리즘
- docker container
- terraform
- telegram
- Airflow
- datacamp
- 그리디
- 프로그래머스
- data_engineer
- Data Engineering
- Dynamic Programming
- 백준온라인저지
- airflow architecture
- SQL
- MySQL
- hackerrank
- 빅데이터를 지탱하는 기술
- airflow webserver
- BOT
- delete join
- dsf
- 데이터 엔지니어
- Spark
- Python
- 2023년 목표
- docker
Archives
- Today
- Total
Lim Seunghyun Space
[백준 온라인 저지] 균형잡힌 세상 본문
문제 출처
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
문제 해설
- 문자열에 포함된 괄호의 열고 닫음이 짝이 잘 이루어져 균형이 잘 이루어져 있는지 확인하는 문제
- 문제에서 사용된 괄호는 소괄호("()"), 대괄호("[]")
- 균형이 잘 이뤄어져 있는지 판단하는 조건
- 모든 여는 소괄호("(")는 닫는 소괄호(")")와만 짝을 이룬다.
- 모든 여는 중괄호("[")는 닫는 중괄호("]")와만 짝을 이룬다.
- 모든 닫는 괄호는 짝을 이루는 여는 괄호가 존재
- 여는 괄호와 닫는 괄호는 1대1로 매칭
- "." 마침표가 입력되면 프로그램 종료
문제 풀이
# source: https://www.acmicpc.net/problem/4949
while True:
line = input()
if line == ".":
break
result = True
stack = []
for c in line:
if c == "(" or c == "[":
stack.append(c)
elif c == ")" or c == "]":
if len(stack) == 0:
result = False
break
data = stack.pop(-1)
if c == ")" and data != "(":
result = False
break
elif c == "]" and data != "[":
result = False
break
if len(stack) != 0:
result = False
print("yes" if result else "no")
- 문자열의 문자를 하나씩 읽으면서 여는 괄호인 나오는 경우에는 스택에 저장하고 닫는 괄호가 나오는 경우에는 스택의 마지막 부분과 비교하여 짝을 이루는지 확인
- 짝을 이루지 않는다면 균형이 맞지 않는 것으로 판단하여 반복 종료
- 마지막으로, 스택이 비어있지 않는 경우에는 짝을 이루지 못한 여는 괄호가 존재하는 것이므로 균형이 맞지 않는 것으로 판단
Github
728x90
'Algorithm > 문제' 카테고리의 다른 글
[Leetcode] Binary Search (0) | 2022.11.23 |
---|---|
[Leetcode] Reverse Integer (0) | 2022.11.21 |
[백준 온라인 저지] 벌집 (0) | 2022.11.13 |
[백준 온라인 저지] 손익분기점 (2) | 2022.11.13 |
[Leetcode] 4. Median of Two Sorted Arrays (0) | 2022.06.10 |