log.Sehee
[프로그래머스] 올바른 괄호 본문
사용 입출력 예제
s = ")()("
result = False
s = "(())()"
result = True
s = "()())(()"
result = False
s = "(()())"
result = True
1)
정확성 & 효율성 테스트 : 테스트케이스 실패
더보기
정확성 테스트
| 테스트 1 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 2 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 3 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 4 〉 | 실패 (0.00ms, 10.3MB) |
| 테스트 5 〉 | 실패 (0.00ms, 10.2MB) |
| 테스트 6 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 7 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 8 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 9 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 10 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 11 〉 | 실패 (0.00ms, 10.1MB) |
| 테스트 12 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 13 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 14 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 15 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 16 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 17 〉 | 통과 (0.02ms, 10.2MB) |
| 테스트 18 〉 | 실패 (0.01ms, 10.2MB) |
효율성 테스트
| 테스트 1 〉 | 통과 (6.17ms, 10.2MB) |
| 테스트 2 〉 | 통과 (6.86ms, 10.4MB) |
# 1)
def solution(s):
if s[0] == ")":
return False # ")"로 시작하는 테스트케이스는 전부 False
s_dict = {"(": 0, ")": 0} # "("와 ")"의 개수 체크
for i in s:
s_dict[i] += 1
return s_dict["("] == s_dict[")"] # "("와 ")"의 갯수가 같다면 True 반환
# s = "()())(()" 일 때 True가 반환됨
# 위 테스트케이스의 return값은 False여야 한다.
2)
정확성 & 효율성 테스트 : 테스트케이스 실패
더보기
정확성 테스트
| 테스트 1 〉 | 실패 (0.00ms, 10.3MB) |
| 테스트 2 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 3 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 4 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 5 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 6 〉 | 통과 (0.00ms, 10.4MB) |
| 테스트 7 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 8 〉 | 통과 (0.01ms, 10.3MB) |
| 테스트 9 〉 | 실패 (0.01ms, 10.3MB) |
| 테스트 10 〉 | 실패 (0.01ms, 10.3MB) |
| 테스트 11 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 12 〉 | 실패 (0.00ms, 10.1MB) |
| 테스트 13 〉 | 실패 (0.01ms, 10.1MB) |
| 테스트 14 〉 | 실패 (0.00ms, 10.2MB) |
| 테스트 15 〉 | 실패 (0.01ms, 10.2MB) |
| 테스트 16 〉 | 통과 (0.02ms, 10.2MB) |
| 테스트 17 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 18 〉 | 통과 (0.01ms, 10.2MB) |
효율성 테스트
| 테스트 1 〉 | 실패 (0.00ms, 10.2MB) |
| 테스트 2 〉 | 통과 (0.01ms, 10.3MB) |
# 2)
def solution(s):
left = "" # "("를 저장할 문자열
right = "" # ")"를 저장할 문자열
for i, n in enumerate(s):
try:
if s[0] == ")":
return False # ")"로 시작하는 문자열은 False
elif n == "(":
left += n
else:
right += n
if s[i + 1] == "(": # ")"의 다음 문자가 "("이라면
if not len(left) == len(right): # left와 right의 문자 갯수 비교
return False # 갯수가 같지 않다면 False 반환
else:
left = "" # 갯수가 같다면 저장 문자열 초기화
right = ""
elif len(left) < len(right):
return False # ")"가 "("보다 많다면 False 반환
except:
pass # out of range 예외처리
return True
# s = "(()())" 일 때 False 반환
# 위 테스트케이스의 return 값은 True여야 한다.
3)
정확성 & 효율성 테스트 : 효율성 시간초과
더보기
정확성 테스트
| 테스트 1 〉 | 통과 (0.00ms, 10MB) |
| 테스트 2 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 3 〉 | 통과 (0.00ms, 10MB) |
| 테스트 4 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 5 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 6 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 7 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 8 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 9 〉 | 통과 (0.01ms, 10MB) |
| 테스트 10 〉 | 통과 (0.01ms, 10MB) |
| 테스트 11 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 12 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 13 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 14 〉 | 통과 (0.01ms, 9.99MB) |
| 테스트 15 〉 | 통과 (0.01ms, 10.3MB) |
| 테스트 16 〉 | 통과 (0.02ms, 10.2MB) |
| 테스트 17 〉 | 통과 (0.01ms, 10MB) |
| 테스트 18 〉 | 통과 (0.02ms, 10.3MB) |
효율성 테스트
| 테스트 1 〉 | 실패 (시간 초과) |
| 테스트 2 〉 | 실패 (시간 초과) |
# 3)
def solution(s):
word = []
if s[0] == ")":
return False
for i in s:
try:
if i == "(":
word.append("(") # "(" 저장
else:
word.remove("(") # ")"일 때 "(" 삭제
except:
return False # 저장된 "("가 없을 때 ")"가 나온다면 False
if word:
return False # "("가 남아있다면 False
return True
정석은 pop이라고 한다.
remove가 pop보다 오래 걸리나 보다.
4)
정확성 & 효율성 테스트
더보기
정확성 테스트
| 테스트 1 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 2 〉 | 통과 (0.00ms, 10.1MB) |
| 테스트 3 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 4 〉 | 통과 (0.00ms, 10.3MB) |
| 테스트 5 〉 | 통과 (0.00ms, 10.4MB) |
| 테스트 6 〉 | 통과 (0.00ms, 9.89MB) |
| 테스트 7 〉 | 통과 (0.01ms, 10.1MB) |
| 테스트 8 〉 | 통과 (0.01ms, 9.94MB) |
| 테스트 9 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 10 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 11 〉 | 통과 (0.00ms, 10.2MB) |
| 테스트 12 〉 | 통과 (0.02ms, 9.96MB) |
| 테스트 13 〉 | 통과 (0.02ms, 10.2MB) |
| 테스트 14 〉 | 통과 (0.02ms, 10.1MB) |
| 테스트 15 〉 | 통과 (0.02ms, 10.1MB) |
| 테스트 16 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 17 〉 | 통과 (0.01ms, 10.2MB) |
| 테스트 18 〉 | 통과 (0.01ms, 10.2MB) |
효율성 테스트
| 테스트 1 〉 | 통과 (9.67ms, 10.2MB) |
| 테스트 2 〉 | 통과 (9.81ms, 10.2MB) |
# 4)
def solution(s):
if s[0] == ")":
return False
word = {"(": 0} # "("의 갯수 카운트
for i in s:
if i == "(":
word["("] += 1 # "("일 때 카운트 +1
else:
word["("] -= 1 # ")"일 때 카운트 -1
if word["("] < 0: # ")"일 때 카운트가 0라면 False 반환
return False
return word["("] == 0 # 남은 "(" 갯수가 0개라면 True
Comments