1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
괄호로 이루어진 문자열 s를 왼쪽으로 x(0 <= x < (s의 길이))칸만큼 회전했을 때
올바른 괄호 문자열을 만드는 x가 몇 번 등장하는지 구하는 문제이다.
2. 풀이
올바른 괄호 문자열을 판단하기 위해 보통 스택 자료구조를 활용한다.
파이썬에서는 스택을 구현할 때 그냥 리스트를 활용하면 된다.
여는 괄호는 스택에 그냥 추가해주고,
닫는 괄호는 스택에서 제일 위에 있는 괄호가 짝이 맞는 괄호라면 pop()을 해줘서 여는 괄호를 제거해주고
짝이 맞지 않는 다른 괄호가 나오면(else) 올바른 괄호 문자열이 아니므로 리턴 해주면 된다.
만약에 문자열 끝에 도달했는데 스택에 남아 있는 원소가 있다면 닫히지 않은 괄호가 있다는 의미이므로 이 경우도 리턴해주면 된다.
괄호를 열고 닫는 과정이 스택에서 원소가 들어가고 나가는 과정과 똑같아서 스택을 배울때 자주 소개된다.
is_valid 함수 내부에서 올바른 괄호 문자열을 판단하는 조건문을 보면 or 뒤에 '\' 를 활용했는데
백슬래시 (\)는 파이썬의 이스케이프 시퀀스 중 하나로, 조건문이 너무 길어져서 한 줄에 작성하기 어려운 경우에 사용된다.
백슬래시 \ 다음에 줄 바꿈이 나타나면, 파이썬은 이를 한 줄로 해석하여 조건문을 연결한다.
백슬래시를 제거하고 한 줄로 작성하면 다음과 같다.
if (bracket == ')' and top == '(') or (bracket == '}' and top == '{') or (bracket == ']' and top == '['):
마지막으로 문자열 회전을 구현하기 위해 문자열 슬라이싱을 이용했다.
구문은 다음과 같다 String[start:end:step]
start: 부분 문자열의 시작 인덱스. 이 인덱스의 문자는 부분 문자열에 포함된다.
end: 부분 문자열의 끝 인덱스. 이 인덱스의 문자는 부분 문자열에 포함되지 않는다.(end-1까지)
step: 현재 문자에서 step간격으로 문자를 추출한다. step을 생략하면 기본값인 1로 설정된다.
3. 코드
def is_valid(s):
stack = []
for bracket in s:
if bracket in ['(', '{', '[']:
stack.append(bracket)
elif bracket in [')', '}', ']']:
if not stack:
return False
top = stack.pop()
if (bracket == ')' and top == '(') or \
(bracket == '}' and top == '{') or \
(bracket == ']' and top == '['):
continue
else:
return False
if stack:
return False
return True
def solution(s):
answer = 0
for i in range(len(s)):
if is_valid(s[i:] + s[:i]):
answer += 1
return answer
Reference:
[python/파이썬] 리스트 요소 회전하는 4가지 방법 - 음수인덱스/문자열슬라이싱/%모듈/deque
안녕하세요! 맨덕입니다. 오늘은 알고리즘 문제를 풀다보면 일차원 리스트를 회전하여 푸는 문제가 많아 일차원리스트를 회전하는 방법 4가지에 대해 정리했습니다. 방법 1. 음수 인덱스를 활용
menduck.tistory.com
02-3 리스트 자료형
지금까지 우리는 숫자와 문자열에 대해서 알아보았다. 하지만 숫자와 문자열만으로 프로그래밍을 하기에는 부족한 점이 많다. 예를 들어 1부터 10까지의 숫자 중 홀수의 모음인 1, …
wikidocs.net
https://www.freecodecamp.org/korean/news/how-to-substring-a-string-in-python/
Python 파이썬 문자열 자르는 방법
Python은 문자열을 부분 문자열(substring)로 만드는 여러 가지 방법을 제공하는데, 이것을 ‘슬라이싱(slicing)’이라고 부릅니다 . 구문은 다음과 같습니다. String[start:end:step] 여기서, start: 부분 문자
www.freecodecamp.org
'코딩 테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python]Programmers H-Index(lv2) (0) | 2024.03.17 |
---|---|
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.16 |
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.14 |
[Python]Programmers 연속 부분 수열 합의 개수(lv2) (0) | 2024.03.12 |
[Python]Programmers 귤 고르기(lv2) - Counter (0) | 2024.03.10 |