https://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 |
문제 풀이
삼항 연산자
x = x+1 if w=="(" else x-1 if w==")" else x
if w=="(":
x = x+1
else:
if w==")":
x = x-1
else:
x = x
solution.py
나의 풀이
def solution(s):
st = []
if s[0]==')': # 처음부터 오른괄호가 있음 false
return False
for i,a in enumerate(s):
if a==')': # 오른 괄호
if not len(st): # 스택이 비어있는데 오른괄호가 들어오면
return False # false
del st[-1] # 스택에 왼괄호가 있으므로 만나서 pop
else: # 왼 괄호
st+=a # 그냥 넣기
if len(st): # 스택에 괄호가 남아있으면 false
return False
return True
다른 풀이
def is_pair(s):
# 함수를 완성하세요
x = 0
for w in s:
if x < 0:
break
x = x+1 if w=="(" else x-1 if w==")" else x
return x==0
출처: https://programmers.co.kr/learn/courses/30/lessons/12909/solution_groups?language=python3
'알고리즘 문제풀이 > 문제풀이' 카테고리의 다른 글
[python] 프로그래머스 Level.2 최댓값과 최솟값 (0) | 2020.05.07 |
---|---|
[python] 프로그래머스 Level.2 JadenCase 문자열 만들기 (0) | 2020.05.06 |
[python] 프로그래머스 Level.2 피보나치 수 (0) | 2020.05.05 |
[python] 프로그래머스 Level.2 N개의 최소공배수 (2) | 2020.05.04 |
[python] 프로그래머스 Level.1 완주하지 못한 선수 (0) | 2020.05.03 |