728x90
올바른 괄호
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s answer
"()()" true
"(())()" true
")()(" false
"(()(" false
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
처음 실패한 답
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def solution(s): while True: try: n=s.index(")") if s[n-1]=="(": if not n: return False elif n==1: s = s[2:] else: s = s[:n-1]+s[n+1:] else: return False if not len(s): return True except: return False | cs |
슬라이싱을 이용해서 풀었더니 정확성은 다 맞았지만 효율성에서 0점을 맞아서 실패했다. 질문하기를 봤더니 스택, 혹은 카운트를 이용하면 된다고 해서 다시 풀었다.
내 성공한 답
1 2 3 4 5 6 7 8 9 10 11 12 13 | def solution(s): cnt = 0 for i in range(len(s)): if s[i]=="(": cnt += 1 elif s[i]==")": if cnt<=0: return False cnt -= 1 if not cnt: return True else: return False | cs |
남의 답 1
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 | cs |
남의 답 2
1 2 3 4 5 6 7 | 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 | cs |
남의 답 3
1 2 | def is_pair(s): return s.count('(') == s.count(')') and s.index('(') < s.index(')') | cs |
1199점 + 7점 -> 1206점
728x90
'Python' 카테고리의 다른 글
| 210710 프로그래머스 코딩 연습 level2 JadenCase 문자열 만들기 (0) | 2021.07.10 |
|---|---|
| 210710 프로그래머스 코딩 연습 level2 최댓값과 최솟값 (0) | 2021.07.10 |
| 210709 프로그래머스 코딩 연습 level2 피보나치 수 (0) | 2021.07.09 |
| 210709 프로그래머스 코딩 연습 level2 행렬의 곱셈 (0) | 2021.07.09 |
| 210707 프로그래머스 코딩 연습 완주하지 못한 선수 (0) | 2021.07.07 |




최근댓글