[ 프로그래머스 ] [1차] 다트게임
/ 제출 1 /
def solution(dartResult):
darts = list(dartResult.strip())
result = []
num = 'ss'
for dart in darts:
print(num, dart, result)
# 숫자 저장
if dart.isdigit():
if num == 1 and dart == '0':
print('10')
num = 10
if num != 'ss':
result.append(num)
print(result)
num = -1
num = int(dart)
# S,D,T에 따라 곱해주기
elif dart == 'S':
num = num ** 1
elif dart == 'D':
num = num ** 2
elif dart == 'T':
num = num ** 3
# * 나 #일 때
elif dart == '*':
num = num * 2
if result:
result[-1] = result[-1] * 2
elif dart == '#':
num = num * (-1)
result.append(num)
return sum(result)
풀이 소요 시간 21분
하.. 요고 안되네..
단순한 구현이라고 생각해서 한 번에 통과될 줄 알았는데.. 이래서는 히든테케 있을 때 장담할 수 없습니다..
더 정확하게 따져봅시다..
아직 테스트케이스 추가해 검증 단계를 하지 않은 상태입니다. 수정해나가 봅시다.
[ 오류 발견 ]
10 뒤에 S/D/T 와 */#가 있는 경우를 수행을 안 해주고 10이 완성되자마자 바로 넣어버립니다.
전체 작동 방식을 손봐줘야할 것 같아보입니다.
이래서 설계단계부터 예외 사항을 포함해서 확실하게 구성했어야하는 것 같습니다. 통째로 조정해야할 수 있으니 말입니다.
def solution(dartResult):
result = []
num = ''
for dart in dartResult:
# 숫자 저장
if dart.isdigit():
num += dart
# S,D,T에 따라 곱해주기
elif dart == 'S':
num = int(num) ** 1
result.append(num)
num = ''
elif dart == 'D':
num = int(num) ** 2
result.append(num)
num = ''
elif dart == 'T':
num = int(num) ** 3
result.append(num)
num = ''
# * 나 #일 때
elif dart == '*':
result[-1] = result[-1]*2
if len(result) > 1:
result[-2] = result[-2] * 2
elif dart == '#':
result[-1] = result[-1] * (-1)
print(num)
return sum(result)
아예 갈아엎은 정도의 코드입니다.
이 문제에서 접근 실패 요인은 각 변수들에 대한 자료형을 섞어서 사용하면서 스스로 헷갈린 것입니다.
각 요소에 대해 정확하게 파악하도록 해야겠습니다.
그리고 중복되는 코드에 대해서 되게 기피하느라 유용한 알고리즘을 짜기 위해 깊게 들어가는 성향이 있는 것 같습니다. 좋기는 한데 일단 목적이 코딩테스트 점수 통과라면, 사실 이 이유가 아니라 정확성에 근거했을 때, 정확성 위에 효율성 있으니 정확성 잡고 그 다음에 효율적이게 고치는 편이 나아보입니다. 그 반대로 하려다가 지금 정답 못 내는 상태로 바뀐 것 같습니다.
문제의 난이도에 비해서 여러모로 심란해진 문제였습니다.
/ 다른 분 풀이 /
def solution(dartResult):
point = []
answer = []
dartResult = dartResult.replace('10','k')
point = ['10' if i == 'k' else i for i in dartResult]
print(point)
i = -1
sdt = ['S', 'D', 'T']
for j in point:
if j in sdt :
answer[i] = answer[i] ** (sdt.index(j)+1)
elif j == '*':
answer[i] = answer[i] * 2
if i != 0 :
answer[i - 1] = answer[i - 1] * 2
elif j == '#':
answer[i] = answer[i] * (-1)
else:
answer.append(int(j))
i += 1
return sum(answer)
하.. 10 을 변환하는걸로 머리 싸맸는데 이렇게 표현하다니.. 진짜 .. ㅠㅜ 그리고 S, D, T 관련해 계산하신 것도 진짜 간단하고 너무 스마트..
너무 부럽다 이렇게 코드 짤 수 있다니..