일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Regression
- LSTM
- programmers
- PANDAS
- 파이썬
- 국민대
- 국민대학교
- python3
- Seq2Seq
- instaloader
- Heap
- C++
- gan
- 데이터베이스
- kmu
- GIT
- 정렬
- Python
- 재귀
- machine learning
- 회귀
- OS
- 스택
- db
- 운영체제
- googleapiclient
- 프로그래머스
- SQL
- Stack
- 머신 러닝
- Today
- Total
정리 노트
프로그래머스 괄호 회전하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/76502
드디어...! 오랜만에 레벨 2 문제를 혼자 힘으로 풀어냈습니다!! 레벨 2 치고는 쉬운 문제였지만 저에게는 감격이었습니다.
저의 풀이
문자열 회전시키는 건 문자열 슬라이싱을 통해 간단하게 구현했습니다.
spinned = mystring[idx:] + mystring[:idx]
문자열 회전보다 핵심은 괄호를 체크하는 방법입니다.
저는 올바른 괄호 문자열인지 확인하기 위해 stack을 이용했습니다. 괄호 중에 왼쪽 괄호( ex. (, {, [ )는 스택에 쌓고, 오른쪽 괄호( ex. ), }, ] )는 스택에 쌓지 않고 스택의 최상단과 비교합니다. 스택의 최상단과 오른쪽 괄호가 짝이 맞으면 스택의 최상단의 괄호를 제거합니다. 만일 괄호 문자열이 올바른 문자열이었으면 스택은 비어있게 됩니다. 그러니 마지막에 스택의 길이로 이 문자열이 올바른지 아닌지 판별합니다.
이를 코드로 작성하면 아래와 같습니다.
def check_parenthenes(_s):
stack = []
parenthenes_pair = {")": "(", "}": "{", "]": "["}
for prth in _s:
if prth == "(" or prth == "{" or prth == "[":
stack.append(prth)
else:
if len(stack) > 0 and stack[-1] == parenthenes_pair[prth]:
stack.pop()
else:
stack.append(prth)
return True if len(stack) == 0 else False
def solution(s):
answer = 0
for i in range(0, len(s)):
spin_s = s[i:] + s[:i]
if check_parenthenes(spin_s):
answer += 1
return answer
프로그래머스 채점 서버에서 확인해본 결과, 최대 148.07ms, 10.5MB만큼 소모했습니다.
다른 사람의 풀이
다른 사람의 풀이들을 보니 대부분 스택을 썼지만 문자열의 replace 함수를 이용해 풀어낸 분도 계셨습니다.
(), {}, [] 가 문자열에 있다면 이를 빈 문자열로 바꿉니다. 이를 반복하다 보면 마지막에는 빈 문자열만 남거나 "{)["와 같이 짝이 맞지 않는 문자열만 남게 됩니다. 이 풀이를 코드로 작성하면 아래와 같습니다.
# Shon-BH님의 풀이
def check(s):
while True:
if "()" in s: s=s.replace("()","")
elif "{}" in s: s=s.replace("{}","")
elif "[]" in s: s=s.replace("[]","")
else: return False if s else True
이 풀이를 프로그래머스 채점 서버에서 확인해본 결과, 최대 446.48ms, 10.4MB 만큼 소모했습니다.
'프로그래머스 코딩테스트 연습' 카테고리의 다른 글
프로그래머스 조이스틱(Python) (0) | 2022.08.08 |
---|---|
프로그래머스 음양 더하기 (0) | 2022.07.19 |
프로그래머스 오픈채팅방 (0) | 2022.07.18 |
프로그래머스 가장 큰 수(Python) (0) | 2022.07.12 |
프로그래머스 빛의 경로 사이클(Python) (0) | 2022.07.11 |