반응형

출처 : 프로그래머스 

문제 설명

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
  • 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {}  ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.


제한사항
  • s의 길이는 1 이상 1,000 이하입니다.
def solution(s):
    answer = 0
    if len(s) %2 != 0:
        return 0
    satanderd_s="[](){}"
    for idx in range(len(s)):
        list_= []
        isS = True
        s_ = s[idx] + s[idx+1:]+s[:idx]

        for idx_i, val_i in enumerate(s_):
            if satanderd_s.index(val_i)%2 == 0:
                list_.append(val_i)
            else:
                if len(list_) == 0:
                    isS = False
                s_1 = satanderd_s[satanderd_s.index(val_i)-1]
                if s_1 in list_:
                    list_.pop()
                else:
                    isS = False
        if len(list_) != 0:
            isS = False

        if isS == True:
            answer += 1
    return answer

테스트 케이스를 뚫었다.

def solution(s):
    tmp_s = s
    answer = 0
    if len(s) % 2 == 1: return answer
    for i in range(len(s)):
        cnt = 0
        t = tmp_s.replace("()", "").replace("{}", "").replace("[]", "")
        while cnt <= 27:
            t = t.replace("{}", "").replace("[]", "").replace("()", "")
            t = t.replace("[]", "").replace("()", "").replace("{}", "")
            t = t.replace("()", "").replace("{}", "").replace("[]", "")
            cnt+=1

        if t == "":
            answer += 1

        tmp_s = tmp_s[1:] + tmp_s[0]

    
    return answer

이것으로 하니깐 17점을 맞았네요 

반응형

'문제 > 프로그래머스' 카테고리의 다른 글

빛의 경로 사이클  (0) 2022.02.02
NULL 처리하기  (0) 2022.01.26
신과 결과 받기  (0) 2022.01.22
n^2 배열 자르기  (0) 2022.01.15
쿼드압축 후 개수 세기  (0) 2022.01.06

+ Recent posts