출처 : programmers.co.kr/learn/courses/30/lessons/12909
* 이 포스팅은 Programmers 코딩 테스트 연습 Level 2 "올바른 괄호" 문제풀이입니다.
문제 원본은 링크를 클릭하시면 확인하실 수 있습니다.
# 문제 설명
-
괄호가 바르게 짝지어졌다는 것은 "(" 문자로 열렸으면 반드시 짝지어서 ")" 문자로 닫혀야 한다는 뜻입니다.
-
예를 들어
-
"()()" 또는 "(())()"는 올바른 괄호입니다.
-
")()(" 또는 "((()("는 올바르지 않은 괄호입니다.
-
# 문제
-
"(" 또는 ")" 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해주세요.
# 제한사항
-
문자열 s의 길이: 100,000 이하의 자연수
-
문자열 s는 "(" 또는 ")"로만 이루어져 있습니다.
입출력
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
# 코드 설명
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def solution(s):
answer = True
stack = []
for x in s:
if len(stack) != 0 and x == ")":
stack.pop()
else:
stack.append(x)
if len(stack) != 0:
answer = False
return answer
|
cs |
-
answer : 입력으로 주어진 문자열 s가 올바른 괄호이면 true를 저장, 올바르지 않은 괄호이면 false를 저장하는 변수
-
stack : 괄호의 짝을 맞추기 위한 스택 자료구조
-
if len(stack) != 0 and x == ")": stack.pop()
-
len(stack) !0 : 스택 자료구조가 비어있을 경우 pop을 하게 되면 오류가 발생하므로 이를 방지하기 위한 코드
-
x == ")" : ")"가 나타나면 스택에 저장되어 있는 "("를 하나 pop
-
pop( ) : 리스트에서 맨 마지막 원소를 하나 꺼냄
-
-
else: stack.append(x)
-
x가 ")" 가 아니면 "("를 스택에 삽입
-
-
if len(stack) != 0:
-
스택이 비어있으면, 모든 괄호의 짝이 맞아 올바른 괄호라는 의미
-
스택이 비어있지 않으면, 즉 스택에 "(" 나 ")" 가 남아 있으면 올바르지 않은 괄호라는 의미
-
'Python > Programmers' 카테고리의 다른 글
[Python/Programmers/Level 1] 서울에서 김서방 찾기 (0) | 2020.10.01 |
---|---|
[Python/Programmers/Level 1] 문자열 내림차순으로 배치하기 (0) | 2020.10.01 |
[Python/Programmers/Level 1] 완주하지 못한 선수 (0) | 2020.10.01 |
[Python/Programmers/Level 1] 두 개 뽑아서 더하기 (0) | 2020.09.30 |
[Python/Programmers/Level 2] 프린터 (0) | 2020.09.30 |