[그 외]/ㄴ (코테연습 : 파이썬 ver)
[프로그래머스] [1차] 다트게임 (파이썬)
__hyeon2__
2021. 6. 18. 21:32
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
<나의 풀이>
def solution(dartResult):
# < 공백이 있는 문자열일 경우를 대비해 공백 제거해줌 >
# (ex : dartResult = "1 S 2 D * 3 T *")
dartResult = ''.join(dartResult.split(' '))
# < 필요한 변수 선언 >
answer = 0
lst = [dartResult[0]] # 첫번째 숫자는 미리 넣어 줌
index = 0
prev = 0
# < 숫자를 기준으로 나누는 코드 >
for i in range(1, len(dartResult)):
# i가 숫자가 아니면, lst[index]에 dartResult[i] 값 추가
if dartResult[i].isdigit() == False:
lst[index] += dartResult[i]
# i가 숫자일 때
else:
# dartResult[i-1] 값도 숫자일 때 (숫자 10일 때 해당)
# (이미 '1'에서 요소를 만들어 추가되었다면, 따로 요소 추가 없이 '0'도 넣어줌)
if dartResult[i-1].isdigit():
lst[index] += dartResult[i]
# 리스트에 새롭게 요소를 추가함 (숫자 0~9일 때 해당)
else:
lst.append(dartResult[i])
index += 1
# < 점수계산용 코드 >
for i in range(len(lst)):
# 숫자가 10인 경우
if lst[i][1].isdigit():
temp = int(lst[i][:2])
n = 2
# 숫자가 0~9인 경우
else:
temp = int(lst[i][0])
n = 1
for j in range(n, len(lst[i])):
if lst[i][j] == 'S':
temp = temp ** 1
elif lst[i][j] == 'D':
temp = temp ** 2
elif lst[i][j] == 'T':
temp = temp ** 3
elif lst[i][j] == '*':
temp = temp * 2
if i != 0:
answer += prev
elif lst[i][j] == '#':
temp *= -1
prev = temp
answer += temp
return answer
정규표현식으로 풀다가 자꾸 막혀서
결국엔 직관적으로 푼 문제😢
<다른 사람의 풀이>
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
# <배운점>
# => 정규표현식으로 코드를 짠 점
728x90
반응형