2https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 해결 방법
stack을 이용한 문제이다.
문자열을 회전시켜준 뒤, stack을 이용해 괄호 검사를 해주면 된다.
2. 내가 작성한 코드
def solution(s):
s = list(s)
cnt = 0
if check(s): cnt+=1 #0회전
for i in range(1,len(s)): #1부터 n-1회전
x = s.pop(0)
s.append(x)
if check(s): cnt+=1 #괄호 검사를 해주고 true면 cnt+=1
return cnt
def check(s): #괄호 검사해주는 함수
stack = []
check = True
for i in s:
if len(stack) == 0: #stack이 비어있으면 push
stack.append(i)
elif i in ["(","[","{"]: #여는 괄호면 push
stack.append(i)
else: #닫는 괄호면 stack[-1]확인
if i == ")" and stack[-1] == "(":
stack.pop()
elif i == "]" and stack[-1] == "[":
stack.pop()
elif i == "}" and stack[-1] == "{":
stack.pop()
else: #쌍이 맞지 않으면 false 후 break
check = False
break
if len(stack) > 0: #s를 다 검사했지만 stack에 남아있으면 false
check = False
return check
3. 메모
def solution(s):
cnt = 0
for i in range(len(s)):
if check(s): cnt+=1
s = s[1:] + s[:1]
return cnt
슬라이싱을 이용해 문자열을 회전시켜줄 수 있으나, 테스트를 돌려본 결과 pop, append 해주는 것이 시간적으로 이득인 거 같다.
왼쪽 => pop, append 이용
오른쪽 => slicing 이용
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.2)' 카테고리의 다른 글
[프로그래머스] Level2 큰 수 만들기(python) (0) | 2023.04.17 |
---|---|
[프로그래머스] Level2 영어 끝말잇기(python) (0) | 2023.04.17 |
[프로그래머스] Level2 우박수열 정적분(python) (0) | 2023.03.23 |
[프로그래머스] Level2 다음 큰 숫자(python) (0) | 2023.03.18 |
[프로그래머스] Level2 JadenCase 문자열 만들기(python) (0) | 2023.03.17 |
댓글