https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import deque
def solution(s):
result = 0
s = deque(s)
for i in range(len(s)):
if check(s):
result +=1
f = s.popleft()
s.append(f)
return result
def check(s):
stack = []
dic = {"}" : "{", "]" : "[", ")" : "("}
for i in range(len(s)):
if s[i] == '{' or s[i] == "[" or s[i] == '(':
stack.append(s[i])
else:
for b in dic:
if s[i] == b:
if len(stack) > 0 and stack[-1] == dic[b]:
stack.pop()
else:
return False
if len(stack) == 0:
return True
else:
return False
먼저 저는 주어진 문자열 s
가 올바른 괄호 문자열인지 판단하는 함수 check
를 작성하였습니다.
check
함수는 먼저 여는 괄호({, [, (
)를 저장하는 stack
변수를 초기화하고
{"닫는 괄호" : "여는 괄호"}의 형태로 저장하여 가지고 있는 딕셔너리 dic
를 생성합니다.
따라서 dic
의 모습은 다음과 같습니다. dic = {"}" : "{", "]" : "[", ")" : "("}
입력으로 들어오는 s
의 각 원소를 하나씩 확인하는데
이때 s
의 원소가 여는 괄호({, [, (
)라면 stack
에 저장하고 그렇지 않다면 닫는 괄호(}, ], )
)라고 판단하여 dic
를 확인하게 됩니다.
현재 s[i]
가 닫는 괄호(b
)라면 stack
의 크기가 0보다 크고 stack
에 마지막으로 들어온 값이 dic[b]
라면 괄호의 짝이 맞기 때문에 stack.pop()
을 하여 stack
의 마지막 요소를 제거해줍니다.
하지만 위의 조건에 맞지 않는다면 올바르지 않은 괄호 문자열로 판단하고 return False
합니다.
반복문이 종료되고 stack
의 크기가 비어있다면 올바론 괄호 문자열이기 때문에 return True
를 하고 그게 아니라면 return False
해줍니다.
solution
함수에서는 s
를 왼쪽으로 편하게 회전시키기 위하여 deque
자료구조를 사용하였습니다.
문자열 s
를 check
함수를 사용하여 올바른 괄호 문자열인지 판단하고 맞다면 result
에 +1
을 해줍니다.
그리고 s.popleft()
를 하여 가장 앞에 있는 원소를 빼고 다시 s.append()
를 하여 마지막으로 넣어 왼쪽으로 회전시켜줍니다.
return result
를 하여 결과를 반환합니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 평균 일일 대여 요금 구하기 MySQL (0) | 2023.01.20 |
---|---|
[코딩테스트] 프로그래머스 프린터 파이썬(Python) (0) | 2023.01.19 |
[코딩테스트] 백준 수 찾기 파이썬(Python) (0) | 2023.01.17 |
[코딩테스트] 백준 부분수열의 합 파이썬(Python) (0) | 2023.01.14 |
[코딩테스트] 프로그래머스 테이블 해시 함수 파이썬(Python) (0) | 2023.01.13 |