티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/76502#
문제설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
s의 길이는 1 이상 1,000 이하입니다.
입출력 예
접근방법
1. collections deque의 rotate를 이용하여 괄호 회전된 배열을 가져온다.
2. 반복문을 통해 문자열을 한개씩 가져온다.
3. 가져온 괄호 문자열을 statck에 append한다.
4. 만약 statck 의 최상단 값과 현재 괄호가 일치할 경우 -> ex) (), {}, []
pop연산을 통해 제거한다.
5. 반복문이 종료되었을때 statck이 비어있으면 정답에 1을 더해준다.
소스코드
정답 소스코드 보기(아래 더보기 눌러주세요.)
정답 소스코드
from collections import deque
def solution(s):
answer = 0
for i in range(len(s)):
queue = deque(s)
queue.rotate(i)
stack = []
while queue:
value = queue.popleft()
if len(stack) ==0: stack.append(value)
else:
if value ==")" and stack[-1] =="(": stack.pop()
elif value =="}" and stack[-1] =="{": stack.pop()
elif value =="]" and stack[-1] =="[": stack.pop()
else: stack.append(value)
if len(stack) == 0 :
answer +=1
return answer
처음에 짠 소스코드(틀린 소스코드)
틀린 소스코드
def solution(s):
answer = 0
checkDic = {"}": "{", "]": "[", ")": "("}
for i in range(len(s)):
queue = deque(s)
queue.rotate(i)
print(queue)
dic = {"{": 0, "[": 0, "(": 0}
trunYN = True
while queue:
value = queue.popleft()
if value in '{([':
dic[value] += 1
else:
if dic[checkDic[value]] == 0:
trunYN = False
break
else:
dic[checkDic[value]] -= 1
if trunYN and dic["{"] == 0 and dic["("] == 0 and dic["["] == 0:
answer += 1
return answer
Dict를 이용하여 괄호를 카운트하여 체크 하고자 하였다.
이 코드의 문제점은 " { ( } ) " 다음과 같이 짝이 옳지 않을경우 괄호의 순서를 체크할 수 없기 때문에 틀린 소스코드이다.
'CS > 코딩테스트' 카테고리의 다른 글
프로그래머스 / LEVEL2 / 프로세스 / python3 (0) | 2023.11.21 |
---|---|
프로그래머스 / LEVEL2 / 의상 / python3 (0) | 2023.11.16 |
프로그래머스 / LVEL2 / 숫자의 표현 (0) | 2023.11.07 |
프로그래머스 - 다음 큰 숫자 - python3 (0) | 2023.11.06 |
프로그래머스 - LEVEL2 - JadenCase 문자열 만들기 (0) | 2023.11.03 |
- Total
- Today
- Yesterday
- 프로그래머스
- 괄호 회전하기
- spring
- 문자열만들기
- vue정의
- 명시적 초기화
- 다음 큰 숫자
- vue3
- Java
- Mac
- 주사위게임3
- 초기화블럭
- 인스턴스초기화블럭
- Leve2
- 클래스초기화블럭
- collections
- optionsAPI
- Level2
- level1
- python3
- vue3란?
- LELVE1
- 숫자의표현
- composition api
- JadenCase
- 문제 리포트
- python2.7
- defaultdict
- JAVA 변수 초기화
- builder
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |