🔒 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
🔓 풀이
🔑 문제 해결 / 코드
def solution(s):
stack = []
for c in s:
if c == "(":
stack.append(c)
else:
if stack:
stack.pop()
else:
return False
if stack:
return False
return True
🍀 Story
처음 문제를 보고 2가지 방법을 떠올렸다.
0을 대입 연산한 변수에 s에 따라 +1, -1을 해서 음수가 나오거나 반복문이 끝난 뒤 answer가 양수인 경우 False, 0인 경우 True를 리턴하는 함수를 만드는 방법.
다른 하나는 stack 자료형에 append, pop을 해서 stack이 비어있는데 pop을 하거나 마지막에 스택에 원소가 남아있는 경우 False, 비어있다면 True를 리턴하는 방법으로 문제를 해결할 수 있었다.
[answer 변수에 0을 대입연산하여 푸는 방법]
def solution(s):
answer = 0
for c in s:
if c == "(":
answer += 1
else:
if answer > 0:
answer -= 1
else:
return False
if answer > 0:
return False
return True
'알고리즘' 카테고리의 다른 글
[프로그래머스] 더 맵게_Python level2(heap) (4) | 2022.09.03 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기_Python level2(스택/큐) (0) | 2022.08.21 |
[프로그래머스] 행렬 테두리 회전하기_Python level2 (0) | 2022.08.17 |
[프로그래머스] 프린터_Python level2(스택/큐) (0) | 2022.08.13 |
[프로그래머스] 다리를 지나는 트럭_Python level2(스택/큐) (0) | 2022.08.13 |