반응형

 

문제

 


코드

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

# 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다
# 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼(= 0 ~ s-1) 회전시켰을 때 
# s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 

def check(s):
    bracket = ['[]', '()', '{}']
    i=0
    len_s = len(s)
    while True:
        for one in bracket:
            s = s.replace(one, '')
        if s == '':
            #print('올바른 괄호 문자열입니다. / return값: True')
            return True
        if len_s == len(s):
            return False
        else:
            len_s = len(s)
        

    # 정상적인 경우 위에서 종료됨
    return False



def solution(s):
    answer = 0
    
    for x in range(len(s)):
        #print('x:', x, ', s:', s)
        
        # 올바른 괄호인지 확인하는 함수 호출
        # bool = False
        bool = check(s)
        if bool:
            answer += 1
            
        # s를 왼쪽으로 x칸만큼 회전(이동)
        s = s[1:] + s[0]

    return answer

 

 

 


문제를 풀며 막혔던 부분 - 테스트1 시간초과

 

위에서 사용한 check함수를 이런식으로 각각을 비교해서 올바른 괄호가 맞는 경우에 빼고 저장하는 식으로 했었더니 시간 초과 에러가 났다.

# 시간초과 나는 코드
def check(s):
    bracket = ['[]', '()', '{}']
    i=0
    while True:
        if s[i:i+2] in bracket:
            s = s[:i] + s[i+2:]
            i = 0
            continue
        elif s == '':
            #print('올바른 괄호 문자열입니다. / return값: True')
            return True
        else:
            i+=1
            if i >= len(s):
                return False

    # 정상적인 경우 위에서 종료됨
    return False

 

그래서 머리가 굳어버려.. 다른 분들의 코드를 참고해봤더니 저렇게 일일이 비교하지 않고

replace로 있을 경우 지우게끔 해서 처리를 하시는 걸 보고서

유레카라고 속으로 외쳤다 ㅋㅋㅋ

 

코드를 짤 때 생각나는대로 짜고 시간복잡도는 생각을 안하는 버릇이 있는데 이것을 좀 고쳐야겠다 ..ㅠ 

시간 초과 뜰때마다 참 답답한데 이건 문제를 많이 풀어봐야 해결되겠지 😭

 

 

참고한 코드:

https://school.programmers.co.kr/questions/53794

 


반응형
복사했습니다!