728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
"""
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
(), [], {} 는 모두 올바른 괄호 문자열입니다.
만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다.
예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다.
예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다.
이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때
s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
"""
def solution(s):
ans, pair = 0, {'{':'}', '[':']', '(':')'}
for i in range(len(s)):
iscorrect, stack = True, []
for v in s:
if v in ['{','[','(']: stack.append(v)
elif not stack or v != pair[stack[-1]]: iscorrect = False
else: stack = stack[:-1]
ans += int(iscorrect and not stack)
s = s[1:]+s[0]
return ans
"""
올바른 문자열의 기준을 먼저 생각해보았다.
1. 열린 기호가 나오기 전에 닫힌 기호가 나오면 안된다.
2. 닫힌 기호가 나올때 짝이 맞아야 한다.
그래서 stack으로 생각해서 풀었다.
먼저 답을 저장할 인트 ans, 서로의 짝을 맞춘 딕셔너리 pair변수를 선언했다.
그리고 문자열을 한바퀴 돌리면서 올바른 문자열인지 체크해야하므로
for문으로 s의 길이만큼 돌려주었다.
그리고 올바른 문자열인지 판단하는 iscorrect변수, stack을 선언하였다.
문자열 s를 하나씩 꺼내오기 위해 for문을 돌려주었고,
위에 적어놓은 1, 2번을 체크했다.
(if) 먼저 열린기호가 나올경우 stack에 넣어주었다.
(elif) 닫힌기호가 나온다면 1번경우 또는 2번경우에 해당한다면 False
(else) 1, 2번이 충족하면 stack에서 열린기호 하나를 지워준다.
그리고 문자열을 다 검사하였으면 ans에 1을 추가시켜준다.
이때 아직 stack에 열린기호가 남아있다면 틀린문자열이므로 이경우는 0을 더해준다.
마지막으로 s의 0번째 인덱스를 마지막 인덱스로 옮겨서 한칸 돌려준다.
"""728x90
반응형
'개발 > 문제풀이' 카테고리의 다른 글
| 프로그래머스 '[3차] 방금그곡' 파이썬 풀이 (0) | 2023.05.18 |
|---|---|
| 프로그래머스 '요격 시스템' 파이썬 풀이 (0) | 2023.05.17 |
| 프로그래머스 '혼자서 하는 틱택토' 파이썬 풀이 (0) | 2023.04.26 |
| 프로그래머스 '공원 산책' 파이썬 풀이 (0) | 2023.04.26 |
| 프로그래머스 '코드 처리하기' 파이썬 풀이 (0) | 2023.04.24 |
댓글