728x90
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
풀이
(1) 단순하게 생각해서 if-else 문으로 작성한 코드
첫번째 테스트케이스 4개는 통과하지만 채점해보면 테스트케이스 5,9,10,13,15,16 번에서 실패한다.
효율성 테스트1도 통과하지 못한다. 그래서 다른 방법을 찾아보게 된다.
def solution(s):
cnt1 = s.count("(")
cnt2 = s.count(")")
if cnt1 == cnt2:
if s[0] == "(":
if s[-1] == ")":
if s.count("()") % 2 == 0:
return True
else:
return False
else:
return False
else:
return False
else:
return False
(2) 짝맞추기 문제는 스택을 이용하자!
결국 "("와 ")"가 짝이 맞아야 하기 때문에 스택을 이용해서 작성해보았다.
이래서 자료구조가..중요함..CS 공부 미루지 말고 열심히 하자
def solution(s):
stack = []
for c in s:
if c=='(':
stack.append(c)
elif not stack or stack.pop()!='(':
return False
return False if stack else True
(3) 답을 맞추고 다른 사람의 풀이를 구경하는데 인상적인 코드가 있어 남겨본다.
예외처리를 해야겠다는 생각이 파바박! 들었음 멋진 코드!
def is_pair(s):
st = list()
for c in s:
if c == '(':
st.append(c)
if c == ')':
try:
st.pop()
except IndexError:
return False
return len(st) == 0
728x90
'💻dev > 💡코딩테스트' 카테고리의 다른 글
프로그래머스 | Lv.2 다음 큰 숫자 (파이썬) (0) | 2023.03.15 |
---|---|
프로그래머스 | Lv.2 영어 끝말잇기 (파이썬) (0) | 2023.03.11 |
프로그래머스 | Lv.2 N개의 최소공배수 (파이썬) (0) | 2023.03.11 |
프로그래머스 | Lv.2 이진 변환 반복하기 (파이썬) (0) | 2023.03.11 |
프로그래머스 | Lv.2 JadenCase 문자열 만들기 (파이썬) (0) | 2023.03.11 |