https://programmers.co.kr/learn/courses/30/lessons/17682
다음 문제는, 문제에서 주어진 조건들에 맞춰 결과값을 도출하는 문제입니다.
- 파라미터로 들어온 값이 S, D, T라면 index(처음에만 0)값과, i-1번째까지의 값이 숫자라는 점을 이용했고, 그 다음 pow 함수를 이용해 계산한 후 tmp라는 리스트에 추가해주었다.
- 그리고 index는 현재 i값 저장
- 파라미터로 들어온 값이 * 일 때, tmp 리스트의 마지막 값을 2배해준다.
- 그리고 tmp 리스트에 값이 2개 이상 존재한다면 그 앞의 값도 2배해준다.
- 파라미터로 들어온 값이 # 일때 tmp 마지막 값을 -1배 해준다.
- tmp의 모든 값을 더해 반환해준다.
def solution(dartResult):
answer = 0
index = 0
tmp = []
for i, v in enumerate(dartResult):
if (v == 'S' or v == 'D' or v == 'T'):
if v == 'S':
tmp.append(pow(int(dartResult[index:i]), 1))
elif v == 'D':
tmp.append(pow(int(dartResult[index:i]), 2))
elif v == 'T':
tmp.append(pow(int(dartResult[index:i]), 3))
index = i + 1
if v == '*':
tmp[len(tmp)-1] *= 2
if len(tmp) > 1 and tmp[len(tmp)-2] in tmp:
tmp[len(tmp)-2] *= 2
index = i + 1
if v == '#':
tmp[len(tmp)-1] *= -1
index = i + 1
answer = sum(tmp)
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
다른 사람은 어떻게 풀었나 체킹해봤는데 깔끔하게 푼 사람들중에 정규표현식을 이용해 해결한 코드를 접하게 됐다. 그래서 나도 정규표현식을 알아가는 시간을 가져 보려 한다.
- 파이썬은 정규 표현식을 지원하기 위해 re(regular expression의 약어) 모듈을 제공한다. re 모듈은 파이썬을 설치할 때 자동으로 설치되는 기본 라이브러리로 사용 방법은 다음과 같다.
import re
p = re.compile('ab*')