티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/76502#

문제설명

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

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

 

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

제한사항

s의 길이는 1 이상 1,000 이하입니다.

 

입출력 예

접근방법

1. collections deque의 rotate를 이용하여 괄호 회전된 배열을 가져온다.

2. 반복문을 통해 문자열을 한개씩 가져온다.

3. 가져온 괄호 문자열을 statck에 append한다.

4. 만약 statck 의 최상단 값과 현재 괄호가 일치할 경우 -> ex) (), {}, [] 

   pop연산을 통해 제거한다.

5. 반복문이 종료되었을때 statck이 비어있으면 정답에 1을 더해준다.

소스코드

정답 소스코드 보기(아래 더보기 눌러주세요.)

더보기

정답 소스코드

from collections import deque

def solution(s):
    answer = 0
      
    for i in range(len(s)):
        queue = deque(s)
        queue.rotate(i)
        stack = []

        while queue:
            value = queue.popleft()
            if len(stack) ==0: stack.append(value)
            else:
                if value ==")" and stack[-1] =="(": stack.pop()
                elif value =="}" and stack[-1] =="{": stack.pop()
                elif value =="]" and stack[-1] =="[": stack.pop()
                else: stack.append(value)
    

        if len(stack) == 0 :
            answer +=1
            
    return answer

 

 

처음에 짠 소스코드(틀린 소스코드)

더보기

틀린 소스코드

def solution(s):
    answer = 0

    checkDic = {"}": "{", "]": "[", ")": "("}

    for i in range(len(s)):
        queue = deque(s)
        queue.rotate(i)
        print(queue)
        dic = {"{": 0, "[": 0, "(": 0}
        trunYN = True
        while queue:
            value = queue.popleft()
            if value in '{([':
                dic[value] += 1
            else:
                if dic[checkDic[value]] == 0:
                    trunYN = False
                    break
                else:
                    dic[checkDic[value]] -= 1

        if trunYN and dic["{"] == 0 and dic["("] == 0 and dic["["] == 0:
            answer += 1

    return answer

Dict를 이용하여 괄호를 카운트하여 체크 하고자 하였다.

 

이 코드의 문제점은 " { ( } )  " 다음과 같이 짝이 옳지 않을경우 괄호의 순서를 체크할 수 없기 때문에 틀린 소스코드이다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함