programmers.co.kr/learn/courses/30/lessons/12909
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ()() 또는 (())() 는 올바른 괄호입니다. )()( 또는 (()( 는 올바르지 않은 괄호
programmers.co.kr
최종 풀이
hwayeon351/Programmers-Algorithms
프로그래머스 코딩테스트 풀이. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.
github.com
def solution(s):
stack = []
for i in s:
if len(stack) == 0:
if i == ")": return False
elif i == "(": stack.append(s)
else:
if i == "(": stack.append(s)
elif i == ")": stack.pop()
if len(stack) == 0: return True
else: return False
풀이 과정
풀이 시간 14분
이 문제는 Stack을 활용하면 문자열의 길이만큼만 탐색해서 문제를 해결 할 수있다. 이전에 푼 프로그래머스 Level 2 짝지어 제거하기와 비슷하다. 짝지어 제거하기 문제는 아래 참고를 확인하면 된다.
Stack 활용하기
문자열 s의 길이 만큼 다음 과정을 반복한다.
- len(stack) == 0인 경우,
- 문자 i == ")"인 경우는 s 문자열이 ")"로 시작하거나, 이전에 "()"쌍이 있어 stack에서 pop() 한 이후 처음 들어온 문자가 ")"인 경우이다. 이때는, 나머지 문자열을 따져주지 않아도 올바른 괄호가 아니므로 return False 해준다.
- 문자 i == "("인 경우는 s 문자열이 "("로 시작하거나, 이전에 "()"쌍이 있어 stack에서 pop() 한 이후 처음 들어온 문자가 "("인 경우이다. 이때는, 다음 ")"가 들어와서 pop() 해야하므로 stack에 i를 쌓아준다.
- len(stack) != 0인 경우,
- i == "("인 경우, stack에 i를 쌓아준다.
- i == ")"인 경우, stack의 top에 있는 "("를 pop() 해준다.
for문이 끝난 후, len(stack) == 0인 경우, 문자열 s가 올바른 괄호이므로 True를, 아니면 False를 반환한다.
참고
[STL] Stack
Stack은 LIFO(Last In First Out, 후입선출)의 자료구조이다. C++의 표준 템플릿 라이브러리로 정의되어 있다. #include 기본 함수 top() Stack의 가장 위의 원소를 반환 push(element) top에 원소 추가 pop() to..
hwayomingdlog.tistory.com
Level 2 짝지어 제거하기
programmers.co.kr/learn/courses/30/lessons/12973?language=python3 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파..
hwayomingdlog.tistory.com
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 다음 큰 숫자 Python 3 (0) | 2021.01.21 |
---|---|
Level 2 소수만들기 Python 3 (0) | 2021.01.21 |
Level 2 짝지어 제거하기 (0) | 2021.01.14 |
Level 2 N개의 최소공배수 Python3 (0) | 2021.01.14 |
Level 2 JadenCase 문자열 만들기 Python3 (0) | 2021.01.08 |