Problem Solving/Programmers
[Programmers] 2018 KAKAO BLIND RECRUITMENT: [1차] 다트 게임
이진2
2021. 2. 5. 20:42
programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
2018년 카카오 공개채용 기출문제이다
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트가 연속적으로 주어졌을 때, 점수의 총 합계를 계산하는 문제
보너스는 (S, D, T)가 존재하고, 각각 점수에 square를 취한다. 옵션은 "*"은 현재, 그리고 이전 점수에 *2를 하며, "#"은 현재 점수에 -1을 취한다.
이렇게 각각의 점수를 구한 뒤, 마지막에 list에 있는 elements를 모두 더해주면 끝
처음에는 스택으로 접근해야 하나 했지만 파이썬의 list로 간단하게 풀 수 있었다
해설에서는 정규식을 사용한 풀이도 추천한다고 했는데, 이후의 기출에서도 왠지 나올 것 같으니 파이썬 정규식에 대해 공부 해 봐야 겠다.
def solution(dartResult):
answer = 0
li=list()
b=False
for i in range(len(dartResult)):
if b:
b=False
continue
if(dartResult[i:i+2]=='10'):
li.append(int(10))
b=True
continue
c=dartResult[i]
if c>='0' and c<='9':
li.append(int(c))
elif c=='D':
li[-1]=pow(li[-1],2)
elif c=='T':
li[-1]=pow(li[-1],3)
elif c=='*':
li[-1]*=2
if len(li)>1:
li[-2]*=2
elif c=='#':
li[-1]*=-1
for i in li:
answer+=i
return answer