프로그래머스 월간 코드 챌린지 시즌2
- Lv 2. 실패율 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/76502
def check_gualho(s):
arr = []
for i in s:
# 여는 괄호일 때
if(i == "[" or i == "{" or i == "("):
arr.append(i)
# 닫는 괄호일 때
else:
if(len(arr) == 0): # 여는 괄호가 없는데 닫는 괄호가 들어오면 -> 올바른 괄호가 절대 아님
arr = [-1]
return arr
# 각자 알맞게 여는 괄호가 짝지어지면 -> arr에서 pop
if(i == "]"):
if (arr[-1] == "["):
arr.pop(-1)
else:
arr.append(i)
if(i == "}"):
if (arr[-1] == "{"):
arr.pop(-1)
else:
arr.append(i)
if(i == ")"):
if (arr[-1] == "("):
arr.pop(-1)
else:
arr.append(i)
return arr
def solution(s):
answer = 0
# s를 왼쪽으로 x칸 만큼 회전 == 맨 왼쪽 괄호부터 떼어내서 오른쪽에 하나씩 붙여감
# 올바르지 않은 괄호 : 열려있는데 닫히지 않음, 닫혀있는게 먼저 나옴
for x in range(len(s)):
ans_arr = check_gualho(s) # 올바른 괄호인지 체크
if(len(ans_arr) == 0): # 올바른 괄호라면 리턴값의 배열 길이가 0
answer += 1
s = s[1:] + s[0] # 회전
return answer
if __name__ == '__main__':
print(solution("[](){}"))
print(solution("}]()[{"))
print(solution("}}}"))
print(solution("{(})"))
print(solution("[({})]"))
arr 리스트
의 마지막 요소와 비교하지 않고 arr 리스트
의 모든 요소를 돌면서 짝이 있으면 제거하는 식으로 짰는데 이렇게 되면 14번 테스트케이스에서 오류가 난다."{(})"
이런 식으로 괄호 문자열이 있으면 이것도 각자 짝을 찾아서 정답으로 처리되어 버려서 틀려버리게 된다 !check_gualho()
함수로 따로 빼서 왼쪽으로 x칸 만큼 회전되는 문자열이 올바른 괄호인지 검사하도록 한다.check_gualho()
함수에서는 스택처럼 괄호를 검사한다.arr 리스트
에 차곡히 넣는다. ( ex. ‘[’, ‘{’, ‘(’ )arr 리스트
에서 마지막으로 들어온 괄호와 짝이 지어지는지 확인한다arr 리스트
에서 제거arr 리스트
에 그대로 추가arr 리스트
가 온전히 비어있으면 → 올바른 괄호 문자열이므로 answer + 1