🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📝 문제 요약
( ), { }, [ ] 는 모두 올바른 괄호 문자열입니다.
대괄호, 중괄호 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다.
s를 왼쪽으로 x(0 <= x < (s의 길이)) 의 칸만큼 회전시켰을 때,
s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하세요.


🔍 문제 풀이 (feat. 접근 방법)
- s의 길이 만큼 for문을 돈다. (회전하는 용도의 for문)
- 이중 for문을 돈다. (괄호의 짝이 맞는지 확인하는 for문)
- 2차 for문 안에서 괄호의 짝이 맞는지 확인한다. 맞다면 answer에 +1을 한다.
- 1차 for문 안에서 s [0] 문자열을 s [-1]로 옮긴다.
- 3,4번을 반복한다.
- answer를 return 한다.
🤔 풀다가 막혔던 부분
프로그래머스에서 다른 테스트케이스(TC)는 다 통과를 하는데 14번 TC만 실패를 했다.
알고 보니, "{ ( } )"와 같이 괄호끼리 서로 포개어진 경우 마지막 elif 문을 타고 stack이 비워져야 하는데 값이 남아있어서 TC 통과를 못했던 것이다.
이 부분 수정을 위해 마지막 elif문에 stack = [ ] 문장을 추가로 넣어주었다.
👩🏻💻 전체 코드
def solution(s):
answer = 0
s = list(s)
stack = []
for i in range(len(s)):
for p in s:
if p == "(":
stack.append(")")
elif p == "[":
stack.append("]")
elif p == "{":
stack.append("}")
elif not stack or stack.pop() != p:
answer -= 1
stack = []
break
if len(stack) == 0:
answer += 1
s.append(s[0])
s.remove(s[0])
return answer
'코딩테스트 연습' 카테고리의 다른 글
| [프로그래머스/Java] Lv. 0 - OX퀴즈 (0) | 2023.09.10 |
|---|---|
| [프로그래머스/Python] Lv. 2 숫자의 표현 (0) | 2023.07.29 |
| [프로그래머스/Python] Lv. 2 이진 변환 반복하기 (0) | 2023.07.20 |
| [프로그래머스/Python] Lv. 2 최솟값 만들기 (0) | 2023.07.11 |
| [프로그래머스/Python] Lv. 2 JadenCase 문자열 만들기 (0) | 2023.07.09 |