Notice
Tags
- Java
- 오블완
- Python
- SingleProject
- Android
- Algorithm
- datastructure
- programmers
- Univ._Study
- 리눅스마스터2급
- Baekjoon
- Artificial_Intelligence
- Database_Design
- c++
- tensorflow
- Image_classification
- 2023_1st_Semester
- cloud_computing
- study
- Unix_System
- C
- Linux
- Personal_Study
- codingTest
- pytorch
- 티스토리챌린지
- 자격증
- app
- Operating_System
- Kubernetes
코딩 기록 저장소
[프로그래머스/Python] 괄호 회전하기 본문
문제 정보
제목 : 괄호 회전하기
난이도 : Lv.2
사용 언어 : Python
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/76502
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- s의 길이는 1 이상 1,000 이하입니다.
입출력 예
s | result |
"[](){}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
입출력 예 설명
입출력 예 #1
- 다음 표는 "[](){}" 를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
0 | "[](){}" | O |
1 | "](){}[" | X |
2 | "(){}[]" | O |
3 | "){}[](" | X |
4 | "{}[]()" | O |
5 | "}[](){" | X |
- 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.
입출력 예 #2
- 다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
0 | "}]()[{" | X |
1 | "]()[{}" | X |
2 | "()[{}]" | O |
3 | ")[{}](" | X |
4 | "[{}]()" | O |
5 | "{}]()[" | X |
- 올바른 괄호 문자열이 되는 x가 2개이므로, 2를 return 해야 합니다.
입출력 예 #3
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
입출력 예 #4
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
나의 풀이
괄호가 올바른지 체크하는 함수를 정의했습니다. s의 길이만큼 반복하는 for문을 생성하여 반복하며 s[i]가 '(', '{', '[' 괄호라면 스택에 추가하고 ')', '}', ']' 괄호라면 괄호가 유효한지 검사하여 False를 리턴하거나 pop()연산을 실행합니다. 반복이 끝나면 stack에 괄호가 남아있는지 검사하여 비어있으면 True를 리턴합니다.
0부터 s의 길이만큼 반복하는 for문을 생성하여 괄호 검사하는 함수가 True라면 answer에 +1을 저장하도록 했습니다. a에 s의 첫번째 문자를 저장하고, 문자열 s에는 첫번째 문자열을 제외한 문자열 + a문자를 저장한 후 다시 반복합니다.
반복이 끝나면 answer을 리턴합니다.
코드
def check(s) :
stack = []
for i in range (len(s)) :
if( s[i] == '(' or s[i] =='{' or s[i] == '['):
stack.append(s[i])
elif ( s[i] == ')' or s[i] == '}' or s[i] == ']' ) :
if (len(stack) == 0) :
return False
else :
if ( s[i] == ')' and stack[-1] == '(' ) :
stack.pop()
elif ( s[i] == '}' and stack[-1] == '{' ) :
stack.pop()
elif ( s[i] == ']' and stack[-1] == '[' ) :
stack.pop()
else :
return False
if (len(stack) != 0) :
return False
return True
def solution(s):
answer = 0
for j in range(len(s)) :
if ( check(s) == True) :
answer +=1
a = s[0]
s = s[1:] + a
return answer
'프로그래머스 > Lv.2' 카테고리의 다른 글
[프로그래머스/Python] 귤 고르기 (0) | 2023.02.01 |
---|---|
[프로그래머스/Python] 행렬의 곱셈 (0) | 2023.01.31 |
[프로그래머스/Python] [1차] 캐시 (0) | 2023.01.30 |
[프로그래머스/Python] H-Index (0) | 2023.01.30 |
[프로그래머스/Python] 멀리 뛰기 (0) | 2023.01.29 |