[프로그래머스] Level 2. 올바른 괄호
사용 언어: Python3
문제
풀이
내 풀이
def solution(s):
stack = []
if s[-1] == '(':
return False
if len(s) % 2 != 0:
return False
for x in reversed(s):
if x == ')':
stack.append(x)
else:
if len(stack) == 0:
return False
stack.pop()
if len(stack) == 0:
return True
return True
다른 사람의 풀이
def solution(s):
cnt = 0
for val in s:
if cnt < 0:
break
cnt = cnt + 1 if val == "(" else cnt - 1 if val == ")" else cnt
# cnt = (cnt + 1 if val == "(" else cnt - 1 if val == ")" else cnt) # 위와 같은 의미
# cnt += 1 if val == "(" else cnt - 1 if val == ")" else cnt # 위와 같은 의미
return cnt == 0
s 를 순회하며 초기값이 0 인 cnt
를 업데이트한다.
s 가 (
일 경우에는 cnt + 1
,
s 가 )
일 경우에는 cnt - 1
,
둘 다 아닌 경우에는 cnt
그대로를 대입한다.
구현은 삼항 연산자를 이용해 코드를 줄일 수 있다.
내 풀이 2
다른 사람의 풀이를 참고하여, 삼항 연산자 & stack 을 이용하여 풀어보았다.
def solution(s):
stack = []
for val in s:
stack.append(val) if val == "(" else stack.pop() if len(stack) > 0 else stack
return len(stack) == 0
참고
이때 조건문을 제외한stack.append(val)
과stack.pop()
그리고stack
자리에는 “expression” 만 들어갈 수 있다.
(continue
혹은break
는 안된다는 의미이다.)
# 가능
months[1] = 29 if year % 400 == 0 or year % 4 == 0 and year % 100 else 28
# 불가능
cnt += 1 if n[i] == '0' else break
참고
삼항 연산자
일반적인 if ~ else ~
라고 생각하면 된다.
# 짝수인지 홀수인지 판단하는 예제
a = 10
# 일반적인 if ~ else ~
if a % 2 == 0:
print("even")
else:
print("odd")
# 삼항 연산자 if ~ else ~ 표현
print("even") if a % 2 == 0 else print("odd")
삼항 연산자 중첩
이 글을 참고했다.
삼항 연산자의 중첩은 if ~ elif ~ else ~
라고 생각하면 된다.
# arr[index] 이 2의 배수인지, 3의 배수인지 아니면 다른 수의 배수인지
arr = [15, 16, 17]
# 일반적인 if ~ elif ~ else
for val in arr:
if val % 2 == 0:
print("AA")
elif val % 3 == 0:
print("BB")
else:
print("CC")
# 삼항 연산자 if ~ elif ~ else 표현
for val in arr:
print("AA") if val % 2 == 0 else print("BB") if val % 3 == 0 else print("CC")
💛 개인 공부 기록용 블로그입니다. 👻