다트 게임(LEVEL 1)
2018 KAKAO BLIND RECRUITMENT
내가 제출한 답안
def solution(dartResult):
answer = []
k = []
for i in range(1, len(dartResult)):
if dartResult[i - 1].isnumeric():
n = int(dartResult[i - 1])
if i < 3:
if n == 0 and i == 2:
n += 10
else:
if n == 0 and dartResult[i - 2].isnumeric():
n += 10
if dartResult[i] == 'S':
n = n ** 1
k.append(n)
elif dartResult[i] == 'D':
n = n ** 2
k.append(n)
elif dartResult[i] == 'T':
n = n ** 3
k.append(n)
dartResult += 'a'
for i in range(1, len(dartResult) - 1):
if dartResult[i] == 'S' or dartResult[i] == 'D' or dartResult[i] == 'T':
tmp = k[len(answer)]
if dartResult[i + 1] == '#':
tmp *= (-1)
elif dartResult[i + 1] == '*':
tmp *= 2
if len(answer) > 0:
answer.append((answer.pop() * 2))
answer.append(tmp)
return sum(answer)
나의 풀이
- 'dartResult' 문자값 전체 탐색실시 → 보너스(S, D, T) 적용한 점수 값을 임시 저장 → 옵션(*, #) 적용 후 전체를 합한 값 반환
- for 반복문을 활용하여 'dartResult' 전체 탐색(IndexError를 피하기 위해 범위는 1부터 시작)
- dartResult[i]가 보너스 값이면 dartResult[i - 1]은 반드시 정수(0 ~ 10) 값이다.
- dartResult[i - 1]이 0인데, dartResult[i - 2]까지 정수 값으로 인식된다면 10점을 획득한 것이다.
- 보너스 조건(S, D, T)에 맞춰서 획득한 점수(n)에 보너스 적용하고 리스트 k에 임시 저장
- 임시 저장 후 옵션(*, #)을 적용할 for 반복문을 활용할 때, IndexError를 방지하기 위해서 dartResult에 'a' 값을 더했다.
- 기회 횟수를 기록하기 위해 len(answer)을 활용
- 각 기회마다 옵션은 보너스 이후에 등장하거나 안하기 때문에 dartResult[i + 1]의 상태를 확인한다.
파이썬 관련 학습내용
- 기존에 알고 있던 내용들 바탕으로 작성해서 새로 학습한 내용은 없고, 응용에 중심을 뒀다.
- IndexError를 피하기 위해 range 조정
- '*' 옵션을 적용하기 위해 같은 리스트 내에서 append와 pop을 동시에 사용했는데, pop이 먼저 작동하고 오류가 없었다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 비밀지도 with Javascript (0) | 2021.12.16 |
---|---|
[프로그래머스] 상호평가 with JavaScript (0) | 2021.09.18 |
[프로그래머스] 부족한 금액 계산하기 with JavaScript (0) | 2021.09.16 |
[프로그래머스] 비밀지도 with Python (0) | 2021.07.09 |
[프로그래머스] 크레인 인형뽑기 게임 with Pyhton (0) | 2021.07.08 |