728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
정규식을 사용하자!
2024.04.15 - [Python] - 정규식(regular expression)
정규식을 사용하여 게임 3세트를 나누기
data = '1S2D*3T'
# 리스트 형식으로 리턴
re.findall(r'([\d]{1,2})([SDT])([*#])?', data)
[('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')]
정규식 살펴보기
([\d]{1,2})(\w)([*#])?
괄호로 그룹화 한 것을 기준으로 살펴보겠습니다.
1번 그룹 [\d]{1,2} -> 한 자리 혹은 두 자리 숫자(0~10 사이)
2번 그룹 [SDT] -> S, D, T 중 하나
3번 그룹 [*#]? -> *, # 중 하나 없어도 됨(? 때문에)
1. 조건문으로
import re
def solution(dartResult):
d_list = re.findall(r'([\d]{1,2})([SDT])([*#])?', dartResult)
add = []
for d in d_list:
if d[1] == 'S':
add.append(int(d[0])**1)
elif d[1] == 'D':
add.append(int(d[0])**2)
else: # 'T'면
add.append(int(d[0])**3)
if d[2] =='#':
add[-1] = -add[-1]
elif d[2] == '*':
if len(add) != 1:
add[-2] = add[-2]*2
add[-1] = add[-1]*2
# 앞에 값이 없을 때
else:
add[-1] = add[-1]*2
return sum(add)
2. 더 쉽게 딕셔너리로
import re
def solution(dartResult):
st = {'S':1, 'D':2, 'T':3}
d_list = re.findall(r'([\d]{1,2})([SDT])([*#])?', dartResult)
add = []
for d in d_list:
add.append(int(d[0])**st[d[1]])
if d[2] =='#':
add[-1] = -add[-1]
elif d[2] == '*':
if len(add) != 1:
add[-2] = add[-2]*2
add[-1] = add[-1]*2
else:
add[-1] = add[-1]*2
return sum(add)
딕셔너리를 이용하면 코드가 간단해진다.
'코딩테스트 문제' 카테고리의 다른 글
[프로그래머스/Python] 붕대 감기 (0) | 2024.08.07 |
---|---|
[프로그래머스/Python] 신규 아이디 추천 (0) | 2024.04.18 |
[프로그래머스/Python] 야근 지수 (0) | 2024.02.20 |
[프로그래머스/Python] 콜라츠 추측 (0) | 2024.02.20 |
[프로그래머스/Python] 베스트 앨범 (0) | 2024.01.20 |