
반응형
문제
코드
# (), [], {} 는 모두 올바른 괄호 문자열이다
# 만약 A가 올바른 괄호 문자열이라면,
# (A), [A], {A} 도 올바른 괄호 문자열입니다.
# 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
# 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다
# 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼(= 0 ~ s-1) 회전시켰을 때
# s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return
def check(s):
bracket = ['[]', '()', '{}']
i=0
len_s = len(s)
while True:
for one in bracket:
s = s.replace(one, '')
if s == '':
#print('올바른 괄호 문자열입니다. / return값: True')
return True
if len_s == len(s):
return False
else:
len_s = len(s)
# 정상적인 경우 위에서 종료됨
return False
def solution(s):
answer = 0
for x in range(len(s)):
#print('x:', x, ', s:', s)
# 올바른 괄호인지 확인하는 함수 호출
# bool = False
bool = check(s)
if bool:
answer += 1
# s를 왼쪽으로 x칸만큼 회전(이동)
s = s[1:] + s[0]
return answer
문제를 풀며 막혔던 부분 - 테스트1 시간초과
위에서 사용한 check함수를 이런식으로 각각을 비교해서 올바른 괄호가 맞는 경우에 빼고 저장하는 식으로 했었더니 시간 초과 에러가 났다.
# 시간초과 나는 코드
def check(s):
bracket = ['[]', '()', '{}']
i=0
while True:
if s[i:i+2] in bracket:
s = s[:i] + s[i+2:]
i = 0
continue
elif s == '':
#print('올바른 괄호 문자열입니다. / return값: True')
return True
else:
i+=1
if i >= len(s):
return False
# 정상적인 경우 위에서 종료됨
return False
그래서 머리가 굳어버려.. 다른 분들의 코드를 참고해봤더니 저렇게 일일이 비교하지 않고
replace로 있을 경우 지우게끔 해서 처리를 하시는 걸 보고서
유레카라고 속으로 외쳤다 ㅋㅋㅋ
코드를 짤 때 생각나는대로 짜고 시간복잡도는 생각을 안하는 버릇이 있는데 이것을 좀 고쳐야겠다 ..ㅠ
시간 초과 뜰때마다 참 답답한데 이건 문제를 많이 풀어봐야 해결되겠지 😭
참고한 코드:
https://school.programmers.co.kr/questions/53794
반응형
'코테공부' 카테고리의 다른 글
[Python] 정렬 : H-Index (0) | 2023.10.16 |
---|---|
[Python] 코딩 기초 트레이닝 : 수열과 구간 쿼리 1 (0) | 2023.10.12 |
[Python] 2017 팁스타운 : 예상 대진표 (0) | 2023.10.05 |
[Python] 해시 : 전화번호 목록 (0) | 2023.10.04 |
[Python] 연습문제 : 연속 부분 수열 합의 개수 (0) | 2023.10.01 |