일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 #알고리즘 #파이썬 #코딩테스트
- java #자바 #생활코딩
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 백트랙킹
- java #자바 #동빈나
- react #리액트 #동빈나
- 재귀
- 파이썬 #백준 #알고리즘 #코딩테스트
- 투포인터
- css #웹 #생활코딩
- DFS
- 백준
- java #자바 #나동빈
- 다익스트라
- 프로그래머스
- Dijkstra
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 다이나믹프로그래밍
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- PYTHON
- 알고리즘
- 자바 #java
- 파이썬
- BFS
- 코딩테스트
- dp
- java #자바
- css #생활코딩 #웹
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 백준 #파이썬 #알고리즘 #코딩테스트
Archives
- Today
- Total
커리까지
[프로그래머스] 괄호 회전하기 본문
728x90
SMALL
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
()
,[]
,{}
는 모두 올바른 괄호 문자열입니다.- 만약
A
가 올바른 괄호 문자열이라면,(A)
,[A]
,{A}
도 올바른 괄호 문자열입니다. 예를 들어,[]
가 올바른 괄호 문자열이므로,([])
도 올바른 괄호 문자열입니다. - 만약
A
,B
가 올바른 괄호 문자열이라면,AB
도 올바른 괄호 문자열입니다. 예를 들어,{}
와([])
가 올바른 괄호 문자열이므로,{}([])
도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s
가 매개변수로 주어집니다. 이 s
를 왼쪽으로 x (0 ≤ x < (s
의 길이)) 칸만큼 회전시켰을 때 s
가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
입출력 예
s | result |
---|---|
"[](){}" |
3 |
"}]()[{" |
2 |
"[)(]" |
0 |
"}}}" |
0 |
입출력 예 설명
입출력 예 #1
- 다음 표는
"[](){}"
를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "[](){}" |
O |
1 | "](){}[" |
X |
2 | "(){}[]" |
O |
3 | "){}[](" |
X |
4 | "{}[]()" |
O |
5 | "}[](){" |
X |
- 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.
입출력 예 #2
- 다음 표는
"}]()[{"
를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "}]()[{" |
X |
1 | "]()[{}" |
X |
2 | "()[{}]" |
O |
3 | ")[{}](" |
X |
4 | "[{}]()" |
O |
5 | "{}]()[" |
X |
- 올바른 괄호 문자열이 되는 x가 2개이므로, 2를 return 해야 합니다.
입출력 예 #3
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
입출력 예 #4
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
제출 답안
- while 탈출 조건은 문자열의 길이만큼 돌면 탈출한다.
- for 문으로 할 때보다 while문으로 loop를 하는게 더 빨랐다.
- s는 copy_s에 다시 할당한다.
- cpoy_s에서 괄호에 해당하는 문자들은 ""로 변경한다.
- 이 횟수는 문자열의 1/2배만큼 하면 된다.
- 예를 들어
{{{}}}
라고 하면 문자열은 6이고 최대 3만 돌면 모든 문자가 공백으로 치환되기에 1/2까지만 돌면 된다.
- 만약 copy_s가 비었으면 answer에 1을 더한다.
- 그 다음에 원래 문자열 s를 왼쪽으로 돌린다.
from collections import deque
def solution(s):
answer = 0
break_cnt = len(s)
while 0 < break_cnt:
copy_s = s
for _ in range(int(len(s) / 2)):
copy_s = copy_s.replace("[]", "")
copy_s = copy_s.replace("{}", "")
copy_s = copy_s.replace("()", "")
if not copy_s:
answer += 1
s = deque(s)
s.rotate(-1)
s = ''.join(s)
break_cnt -= 1
return answer
테스트 1 〉 | 통과 (470.85ms, 10.1MB) |
---|---|
테스트 2 〉 | 통과 (271.25ms, 10.1MB) |
테스트 3 〉 | 통과 (147.19ms, 10.3MB) |
테스트 4 〉 | 통과 (134.32ms, 10.3MB) |
테스트 5 〉 | 통과 (134.38ms, 10.1MB) |
테스트 6 〉 | 통과 (185.91ms, 10.1MB) |
테스트 7 〉 | 통과 (152.77ms, 10.3MB) |
테스트 8 〉 | 통과 (164.78ms, 10.4MB) |
테스트 9 〉 | 통과 (129.42ms, 10.3MB) |
테스트 10 〉 | 통과 (151.36ms, 10.3MB) |
테스트 11 〉 | 통과 (133.69ms, 10.2MB) |
테스트 12 〉 | 통과 (0.01ms, 10.1MB) |
테스트 13 〉 | 통과 (0.02ms, 10.2MB) |
테스트 14 〉 | 통과 (0.02ms, 10.3MB) |
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[프로그래머스] 피보나치 수 (1) | 2022.10.08 |
---|---|
[프로그래머스] 2022 카카오 블라인드 주차 요금 계산 (0) | 2022.10.06 |
[프로그래머스] 영어 끝말잇기 (0) | 2022.10.02 |
[프로그래머스] 숫자의 표현 (0) | 2022.10.01 |
[프로그래머스] 자릿수 더하기 (0) | 2022.09.29 |
Comments