4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (31일차)
[4코1파] 2023.01.13~ (22일차)

Today :

2023.02.03 [31일차]

프로그래머스 LV2.
괄호 회전하기
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
다음 표는 "{}" 를 회전시킨 모습을 나타낸 것입니다.


올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.

입출력 예 #2
다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다.

문제 풀이 방법

  • LV1 에 있는 올바른 괄호와 유사한 결의 문제
  • 그대신 괄호의 종류가 3개로 늘어서 좀 귀찮게 하는 문제임
  • 처음 들어온 문자열을 왼쪽으로 이동하는 걸 처음에는 인덱싱을 이용해서 했는데, rotate 라는 함수를 이용해서 음수 값을 넣으면 넣은 int 만큼 왼쪽으로 이동, 양수 값을 넣으면 오른쪽으로 이동한다는 것을 알게 되었음
  • queue 에 넣어서 pop 하는 형식으로 해결
  • 조건을 주렁주렁 달아주면 됨
  • check 하는 함수는 따로 만들어서 핸들링함

내 코드

from collections import deque

def solution(s):
    answer = 0
    def check_pair(s):
        stack = []
        
        for string in s:
            if string in ['(','{','[']:
                stack.append(string)
            else:
                if not stack:
                    return False
                
                remove_s = stack.pop()
                
                if string ==']' and remove_s!='[':
                    return False
                elif string =='}' and remove_s != '{':
                    return False
                elif string==')' and remove_s != '(':
                    return False
                    
        return len(stack)==0
                
    queue = deque(s)
                        
    for q in range(len(queue)):
        queue.rotate(-1)
        if check_pair(queue):
            answer +=1

    return answer

증빙

다른 사람 풀이

  • 처음에 사용하려고 했던 정규표현식을 활용한 풀이..
    실패했는데 이새럼은 성공함

여담

배고프고 졸립당

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글