- 오늘의 학습 키워드
- 공부한 내용 본인의 언어로 정리하기
- 오늘의 회고 :
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12909#
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
첫 코드
- 생각 : '('와 ')' 갯수를 세줘서 둘이 같으면 되는 것 아닐까?
- 함정 : ")()("와 같은 케이스를 걸러내지 못합니다.
def solution(s):
cnt_start = 0
cnt_end = 0
for i in range(len(s)):
if cnt_start == 0 and s[i] == ")":
answer = False
break
elif s[i] == "(":
cnt_start += 1
else:
cnt_end += 1
if cnt_start == cnt_end and cnt_start != 0:
answer = True
else:
answer = False
# [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print('Hello Python')
return answer
두 번째 코드:
- 생각 : 그럼 예외 케이스를 미리 걸러버리면 되겠다. 처음부터 ')'이 나오면 False를 리턴해버리고, 마지막에 '('이 나와도 문제가 있는 것이므로 False를 리턴하자.
- 함정 : 위의 예외 케이스는 걸러냈지만 '())((()'와 같은 케이스는 걸러내지 못합니다. '('은 늘 ')'의 갯수와 동일하거나 더 많아야 하는데, 세 번째 예외 케이스를 보면 3번째 원소에서 괄호가 열리지도 않은 채 두 번 닫혔습니다.
def solution(s):
cnt_start = 0
cnt_end = 0
for i in range(len(s)):
if i == 0 and s[i] == ")":
answer = False
return answer
break
if i == len(s) - 1 and s[i] == "(":
answer = False
return answer
break
if s[i] == "(":
cnt_start += 1
else:
cnt_end += 1
if cnt_start != cnt_end:
answer = False
else:
answer = True
return answer
뭐가 문제일까..
놓친점 :
반복문을 돌 때에도 '(' 숫자보다 ')'의 숫자가 많다면 일단 걸러줘야 합니다.
해결 :
반복문을 돌 때마다 '('와 ')'의 숫자를 카운트해줬습니다. 반복문마다 예외 케이스를 찾아 False 리턴을 해줬더니 해결되었습니다.
def solution(s):
cnt_start = 0
cnt_end = 0
answer = True
for item in s:
if item == "(":
cnt_start += 1
else:
cnt_end += 1
# 갯수를 센 시점에서 ')'의 갯수가 더 많다면 False입니다.
if cnt_start < cnt_end:
answer = False
return answer
break
# for문에서는 살아돌아왔지만, '('와 ')' 갯수 불일치일 경우 False입니다.
if cnt_start != cnt_end:
return False
else:
return True
'연습하기 > Python 문제풀이' 카테고리의 다른 글
[Python] 99클럽 코테 스터디 3일차 TIL : 큐, 스택 (0) | 2024.07.29 |
---|---|
[Python] 99클럽 코테 스터디 6일차 TIL 반복문, 딕셔너리 (0) | 2024.07.28 |
[Python] 99클럽 코테 스터디 5일차 TIL 반복문, 딕셔너리 (0) | 2024.07.27 |
[Python] 99클럽 코테 스터디 1일차 TIL 형변환 (0) | 2024.07.25 |
[Python] 99클럽 코테 스터디 3일차 TIL 반복문과 조건문 (3) | 2024.07.25 |
댓글