Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모델링
- 데이터분석
- Brightics Studio
- 영상제작기
- 포스코 아카데미
- 개인 의료비 예측
- 노코드AI
- 브라이틱스 서포터즈
- Brigthics를 이용한 분석
- 브라이틱스
- 삼성 SDS Brigthics
- 삼성SDS
- 혼공
- 팀 분석
- 직원 이직여부
- Brightics
- Brigthics Studio
- 혼공머신
- 추천시스템
- 포스코 청년
- 직원 이직률
- 삼성SDS Brigthics
- 삼성SDS Brightics
- 캐글
- 데이터 분석
- 혼공머신러닝딥러닝
- Brigthics
- 혼공학습단
- Brightics를 이용한 분석
- 삼성 SDS
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level 2_괄호 회전하기(월간 코드 챌린지 시즌2) 본문
📌문제 유형
월간 코드 챌린지 시즌2
📌문제
📌나의 문제풀이
1차 시도(85.7)
- [, (, {가 들어오면 +1, ],},)가 들어오면 -1
- 문자열 개수만큼 반복하기
from collections import deque
def correct(s):
cnt_1, cnt_2, cnt_3 = 0, 0, 0
if s[0] not in ['[','{','(']:
return 0
# 중간에 틀어지는 애들 고민하기
for i in range(len(s)):
if s[i] =='[':
cnt_1 += 1
elif s[i] ==']':
cnt_1 -= 1
if cnt_1 < 0:
return 0
if s[i] == '(':
cnt_2 += 1
elif s[i] == ')':
cnt_2 -= 1
if cnt_2 < 0:
return 0
if s[i] == '{':
cnt_3 += 1
elif s[i] == '}':
cnt_3 -= 1
if cnt_3 < 0:
return 0
return 1
def solution(s):
answer = 0
s = deque(s)
answer += correct(s)
for i in range(1,len(s)):
first = s.popleft()
s.append(first)
answer += correct(s)
return answer
2차 시도(92.9)
- 1차 시도에서 cnt의 개수가 0이 아닐 경우, 0을 리턴하는 것만 추가
from collections import deque
def correct(s):
cnt_1, cnt_2, cnt_3 = 0, 0, 0
if s[0] in [']','}',')']:
return 0
# 중간에 틀어지는 애들 고민하기
for i in range(len(s)):
if s[i] =='[':
cnt_1 += 1
elif s[i] ==']':
cnt_1 -= 1
if cnt_1 < 0:
return 0
if s[i] == '(':
cnt_2 += 1
elif s[i] == ')':
cnt_2 -= 1
if cnt_2 < 0:
return 0
if s[i] == '{':
cnt_3 += 1
elif s[i] == '}':
cnt_3 -= 1
if cnt_3 < 0:
return 0
# 추가
if cnt_1 != 0 or cnt_2 != 0 or cnt_3 != 0:
return 0
return 1
def solution(s):
answer = 0
s = deque(s)
answer += correct(s)
for _ in range(1,len(s)):
first = s.popleft()
s.append(first)
answer += correct(s)
return answer
3차 시도(통과)
- 테케 14번만 통과 못함 (14번 예시, ([{)}] 일 때, 답 0)
- stack 이용
- stack에 {,[,( 문자만 넣기
- stack 맨 끝과 ],},) 가 연결되는 경우 stack.pop()
- stack이 비어있을 경우 0, 아니면 1
from collections import deque
def correct(s):
stack = list()
if s[0] in ['}',']',')']:
return 0
for i in s:
if i in ['{','[','(']:
stack.append(i)
else:
if i in ['}',']',')'] and len(stack) == 0:
return 0
if i == '}' and stack[-1] == '{':
stack.pop()
elif i == ']' and stack[-1] == '[':
stack.pop()
elif i == ')' and stack[-1] == '(':
stack.pop()
else:
return 0
if len(stack) == 0:
return 1
else:
return 0
def solution(s):
answer = 0
s = deque(s)
answer += correct(s)
for _ in range(1,len(s)):
first = s.popleft()
s.append(first)
answer += correct(s)
return answer
📌다른 사람의 문제풀이
1) 유사 풀이
def is_valid(s):
stack = []
for ch in s:
if not stack:
stack.append(ch)
elif stack[-1] == '(':
if ch==')': stack.pop()
else: stack.append(ch)
elif stack[-1] == '{':
if ch=='}': stack.pop()
else: stack.append(ch)
elif stack[-1] == '[':
if ch==']': stack.pop()
else: stack.append(ch)
return False if stack else True
def solution(s):
answer = 0
for i in range(len(s)):
answer += is_valid(s[i:]+s[:i])
return answer
📌리뷰
- 스택(stack) : 후입후출. 나중에 들어온게 제일 먼저 나간다. 짝 맞추기 할 때 유용
- 리스트로 stack 만들기
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스/Python] Level 2_n^2 배열 자르기(월간 코드 챌린지 시즌3) (0) | 2022.10.17 |
---|---|
[프로그래머스] Level 2_튜플(2019 카카오 개발자 겨울 인턴십) (0) | 2022.10.14 |
[프로그래머스] Level 2_행렬의 곱셈(연습문제) (0) | 2022.10.13 |
[프로그래머스] Level 2_[1차]캐시(2018 KAKAO BLIND RECRUITMENT) (0) | 2022.10.13 |
[프로그래머스] Level 2_점프와 순간 이동(Summer/Winter Coding(~2018)) (0) | 2022.10.13 |
Comments