CoTe/[programmers]1
올바른 괄호
TheSole
2024. 2. 2. 14:59
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
def solution(s):
wt = 0
for c in s :
print(wt)
if c == '(' : wt += 1
elif c == ')' : wt -= 1
if wt < 0 : return False
return wt == 0
- 처음 풀 때 문제를 제대로 이해하지 못함 제대로 설명하자면
- "((" 열렸으면 "))"무조건 짝지어서 닫혀야함 그래서 4번째 "(()(" 이게 안되되고 될려면 "(())"되어야 함.
- 여기서 핵심은 "wt"라는 변수를 두고 입력 문자열을 받아서 서로 연속되는지 증감으로 계싼하는 것이 목표임. 이 때 "wt"는 항상 0을 넘어야하는데 넘지 않으면 false로 처리하고 넘으면 True로 처리함
- 신기했던 점은 리턴에 "True"라고 쓰지 않고 리턴에 "wt==0"이라고 쓰면 위에 변수 "wt" 값을 체크 하고 "True"로 반환함.
- 리턴에 저 값을 넣어주면 "조건문?" 같은 느낌임. 값이 올바르면 "True" 반환 아니면 "False" 따라서 아래 리턴 바꾼 값도 정상적으로 작동됨
def solution(s):
temp = 0
for c in s:
if c == "(":
temp += 1
elif c == ")":
temp -= 1
# Here
if temp < 0:
return temp > 0
return temp == 0