반응형
해당 문제는 2018 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 프로그래머스 기준 Level 1에 해당한다. 다트를 던질 때 Single Double Triple 등을 유의하며, *, #에 해당하는 값도 처리하는 것이 관건이다.
첫 번째 풀이로 접근했을 때, 80% 정도 정답이 나왔다.
def calculate(num, oper):
if oper == 'S':
return num ** 1
elif oper == 'D':
return num ** 2
elif oper == 'T':
return num ** 3
def solution(dartResult):
score = []
for dr in dartResult:
if dr.isnumeric():
n = int(dr)
elif dr in ['S', 'D', 'T']:
score.append(calculate(n, dr))
elif dr == '*':
if len(score) > 1:
score[-2] = score[-2] * 2
score[-1] = score[-1] * 2
else:
score[-1] = score[-1] * 2
elif dr == '#':
score[-1] = score[-1] * (-1)
print(score)
return sum(score)
이는 문제 중 '1S2S#10S' 와 같이 숫자가 두 자릿수가 나오는 경우에 문제가 틀리게 된다. 이를 해결하기 위해 n을 숫자가 아닌 str으로 변환하여 아래와 같이 풀이하였다.
def calculate(num, oper):
if oper == 'S':
return num ** 1
elif oper == 'D':
return num ** 2
elif oper == 'T':
return num ** 3
def solution(dartResult):
score = []
n = ''
for dr in dartResult:
if dr.isnumeric():
n += dr
elif dr in ['S', 'D', 'T']:
score.append(calculate(int(n), dr))
n = ''
elif dr == '*':
if len(score) > 1:
score[-2] = score[-2] * 2
score[-1] = score[-1] * 2
else:
score[-1] = score[-1] * 2
elif dr == '#':
score[-1] = score[-1] * (-1)
print(score)
return sum(score)
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 - Python (0) | 2023.09.05 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기 - Python (0) | 2023.09.05 |
[프로그래머스] 비밀지도 - Python (0) | 2023.09.03 |
[프로그래머스] 오픈채팅방 - Python (0) | 2023.09.03 |
[프로그래머스] 최소직사각형 - Python (0) | 2023.09.03 |