코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

풀이)

괄호가 왼쪽으로 한바퀴 회전하는 동안 각 상태가 올바른 괄호 문자열인지 체크하는 문제이다.

괄호 회전은 문자열의 가장 첫번째 값을 temp에 저장한 뒤 나머지 값들을 s[n-1]로 옮기는 방식을 이용했고

괄호가 올바른지 체크하는 과정에는 Stack을 이용하여 다음과 같은 조건들을 구현했다.

1. 여는 괄호가 없는데 닫는 괄호가 나온 경우

2. 괄호의 짝이 안맞는 경우

3. 짝이 없는 괄호가 존재할 경우

알고리즘)

원소의 값이 '[', '{', '(' 일 경우 스택에 push()

']', '}', ')인데 경우 스택이 비었다면 return False(여는 괄호가 없는데 닫는 괄호가 나온 경우)

스택이 비어있지 않을 때 stack의 top값과 원소값의 짝이 맞는경우 pop()

짝이 맞지 않는 경우 return False(괄호의 짝이 안맞는 경우)

문자열의 길이만큼 반복

stack에 남는 값이 있다면 return False(짝이 없는 괄호가 존재할 경우)

코드)

def check(strs):
    stack = []
    for i in strs:
        if i == '[' or i == '(' or i == '{':
            stack.append(i)
        else:
            if not stack: # 스택이 비었다면
                return False # 여는 괄호가 없는데 닫는 괄호가 나온 경우
            else:
                top = stack[-1]
                if top == '[' and i == ']' or top == '(' and i == ')' or top == '{' and i == '}':
                    stack.pop()
                else: # 짝이 안맞을때
                    return False
    if stack: # 짝이 없는 괄호가 존재
        return False 
    else:
        return True 
                    
                
def solution(s):
    answer = 0
    s = list(s)
    if check(s):
        answer += 1 
    if len(s) > 1:    
        for i in range(1,len(s)):
            temp = s[0]
            for j in range(0,len(s) - 1):
                s[j] = s[j+1]
            s[-1] = temp
            if check(s):
                answer += 1
        
    return answer

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

오픈채팅방  (0) 2021.10.24
후보키  (0) 2021.10.18
튜플  (0) 2021.10.10
조이스틱  (0) 2021.10.03
다음 큰 숫자  (0) 2021.10.03

+ Recent posts