728x90
주어진 숫자에서 k개의 digit을 빼서 가장 큰 수를 만드는 문제
더보기
문제 설명
괄호가 바르게 짝지어졌다는 것은 '$($' 문자로 열렸으면 반드시 짝지어서 '$)$' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "$()()$" 또는 "$(())()$" 는 올바른 괄호입니다.
- "$)()($" 또는 "$(()($" 는 올바르지 않은 괄호입니다.
'$($' 또는 '$)$' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '$($' 또는 '$)$' 로만 이루어져 있습니다.
처음 작성
"$($"면 1을 더하고 "$)$"면 1을 빼서 괄호가 순서대로 짝이 맞는지 확인했습니다.
def solution(s):
i = 0
for t in s:
if t == "(":
i += 1
else:
i -= 1
if i < 0:
return False
if i == 0:
return True
else:
return False
중복되는 내용은 한 줄로 작성해서 작성
def solution(s):
i = 0
for t in s:
i = i+1 if t == "(" else i-1
if i < 0:
break
return i == 0
다른 방식으로 시도
"$($"면 stack에 저장하고 "$)$"면 stack에서 "$($"를 제거하는 방식으로 접근했습니다.
def solution(s):
stack = []
for t in s:
if t == '(':
stack.append(t)
else:
try:
stack.pop()
except:
return False
if stack:
return False
return True
더 짧게 만들어보려고 했는데, 별 차이는 없네요.
def solution(s):
stack = []
for t in s:
try: stack.append(t) if t == '(' else stack.pop()
except IndexError: return False
return stack == []
더보기
입출력 예
s | answer |
"$()()$" | true |
"$(())()$" | true |
"$)()($" | false |
"$(()($" | false |
'IT > Python' 카테고리의 다른 글
[프로그래머스] Lv.3 택시 요금 [Python] (0) | 2023.08.12 |
---|---|
[프로그래머스] Lv.2 두 원 사이의 정수 쌍 [Python] (0) | 2023.08.11 |
[프로그래머스] Lv.2 큰 수 만들기 [Python] (0) | 2023.08.11 |
[백준] 15904번 UCPC는 무엇의 약자일까? [Python] (0) | 2023.08.10 |