Programmers
Meet the best programming lessons in videos and practices. Programmers provide programing lessons, algorithm problems, programming competitions, and blockchain materials.
프로그래머스 문제풀이
문제
코딩테스트 연습 – 올바른 괄호
The definition of correctly paired parentheses means that if it is opened with a ‘(’ character, it must be closed with a ‘)’ character.
For instance,
For instance,
문제설명
괄호가 바르게 짝지어졌다는 것은 ‘(‘ 문자로 열렸으면 반드시 짝지어서 ‘)’ 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- “()()” 또는 “(())()” 는 올바른 괄호입니다.
- “)()(” 또는 “(()(” 는 올바르지 않은 괄호입니다.
‘(‘ 또는 ‘)’ 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 ‘(‘ 또는 ‘)’ 로만 이루어져 있습니다.
입출력 예
s | answer |
---|---|
“()()” | true |
“(())()” | true |
“)()(“ | false |
“(()(“ | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
문제해결과정
- “(“와 “)”가 한쌍을 이루어 올바른 괄호라고 인정된다.
- 즉, “)”가 나올때 “(“가 있는지 확인하고 같이 제거해주면 될 듯하다.
- 스택을 사용해서 “(“는 바로 스택에 넣어준다.
- “)”가 나왔을때는 앞 요소가 “(“인지 확인하고 맞다면 “(“를 스택에서 제거하고, 아니라면 “)”을 스택에 쌓아준다.
- 반복한다.
- 최종적으로 반복이 종료됐을때 스택의 길이를 확인해서 0 이 아니라면 False 값을 반환한다.
위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.
* 스택이란?
스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO – Last In First Out)이다.
나의 풀이
def solution(s): answer = True stack = [] for v in s: # s 변수의 값을 하나싹 추출 if v == ")": # ")"라면 if len(stack)>0: # 스택이 1이상일때면 if stack[-1]=="(": # 스택 마지막 요소가 "("이라면 stack.pop() # 스택 마지막 값 반환제거 else: # 스택 마지막 요소가 "("가 아니라면 stack.append(v) # 스택 마지막에 ")"를 추가 else: # 스택이 1이상이 아니라면 stack.append(v) # 스택 마지막에 ")"를 추가 else: # "("라면 stack.append(v) # 스택에 추가 if len(stack)!=0: # 스택길이가 0이 아니면 answer = False # answer은 False return answer
다른 사람의 풀이
이번 문제는 파이써닉한 다른 풀이를 찾지못해서 따로 입력하지 않았습니다.