본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.2)

[프로그래머스] Level2 괄호 회전하기(python)

by 윤무무 2023. 3. 29.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 해결 방법

stack을 이용한 문제이다.

 

문자열을 회전시켜준 뒤, stack을 이용해 괄호 검사를 해주면 된다.

 

2. 내가 작성한 코드
def solution(s):
    s = list(s)
    cnt = 0
    
    if check(s): cnt+=1 #0회전
    
    for i in range(1,len(s)): #1부터 n-1회전
        x = s.pop(0)
        s.append(x)
        if check(s): cnt+=1 #괄호 검사를 해주고 true면 cnt+=1
    return cnt

def check(s): #괄호 검사해주는 함수
    stack = []
    check = True
    for i in s:
        if len(stack) == 0: #stack이 비어있으면 push
            stack.append(i)
        elif i in ["(","[","{"]: #여는 괄호면 push
            stack.append(i)
        else: #닫는 괄호면 stack[-1]확인
            if i == ")" and stack[-1] == "(":
                stack.pop()
            elif i == "]" and stack[-1] == "[":
                stack.pop()
            elif i == "}" and stack[-1] == "{":
                stack.pop()
            else: #쌍이 맞지 않으면 false 후 break
                check = False
                break
    
    if len(stack) > 0: #s를 다 검사했지만 stack에 남아있으면 false
        check = False
        
    return check

 

3. 메모
def solution(s):
    cnt = 0
    for i in range(len(s)):
        if check(s): cnt+=1
        s = s[1:] + s[:1]             
    return cnt

슬라이싱을 이용해 문자열을 회전시켜줄 수 있으나, 테스트를 돌려본 결과 pop, append 해주는 것이 시간적으로 이득인 거 같다.

 

 

 

왼쪽 => pop, append 이용

오른쪽 => slicing 이용

댓글