카테고리 없음
[프로그래머스] 다트 게임 (Python)
seonyounggg
2021. 4. 18. 15:28
✏️ 문제
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
✏️ 풀이
조건 그대로 구현하는 문제이다.
배열 인덱싱만 주의하면 크게 어려울 것은 없지만 조건이 구구절절 써있다보니 처음엔 다소 이해하기가 어려웠다.
문자열을 3개씩 자르고 만약 옵션이 없는 경우 / 숫자가 10인 경우를 각각 예외처리 해주었다.
✏️ 코드
def solution(dartResult):
total = []
cur = 0
while True:
if cur == len(dartResult):
break
cmd = dartResult[cur:cur + 3]
if cmd[0]=='1' and cmd[1]=='0':
cmd = dartResult[cur:cur+4]
if cmd[3:] != '*' and cmd[3:] != '#': # 옵션 없음
cmd = dartResult[cur:cur + 3]
cur = cur + 3
else:
cur = cur + 4
score = 10
bonus = cmd[2]
option = cmd[3:]
else:
if cmd[2:] != '*' and cmd[2:] != '#': # 옵션 없음
cmd = dartResult[cur:cur + 2]
cur = cur + 2
else:
cur = cur + 3
score = int(cmd[0])
bonus = cmd[1]
option = cmd[2:]
if bonus == "S":
i = score ** 1
elif bonus == "D":
i = score ** 2
elif bonus == "T":
i = score ** 3
if option == '*':
if total:
total.append(2 * total.pop())
total.append(i * 2)
elif option == '#':
total.append(i * (-1))
else:
total.append(i)
answer = sum(total)
return answer
너무 지저분하지만... 문제 조건 자체가 헷갈려서 정리도 쉽지 않았다.
10일 경우에는 flag변수를 하나 둬서 인덱스에 1씩 더하는 방법으로 코드 중복을 줄일 수 있을 것 같다. 나중에 해야지....
✏️ 다른 사람 풀이
def solution(dartResult):
point = []
answer = []
dartResult = dartResult.replace('10','k')
point = ['10' if i == 'k' else i for i in dartResult]
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을 애초에 다른 문자로 바꿔두는 방식으로 예외 처리를 한 풀이이다.
깔끔...
✏️ 생각
201 카카오 블라인드 공채 문제...
Level 1 이라 구현 자체는 쉬운데 문제 조건 생긴게 복잡하다.
그나마 위에 처럼 10만 잘 처리해주면 수월할 듯 하다!