반응형
https://programmers.co.kr/learn/courses/30/lessons/17682?language=python3
풀이
숫자, 문자, 기호를 분리하고 문자열만 찾아서 앞에 숫자 제곱을 해준다
그리고 그 뒤 요소가 기호이면 기호 계산을 해준다.
* 은 이전 점수에도 2배를 해줘야하기 때문에
계산을 마치고 prev에 점수를 저장해뒀다가 *이나오면 prev를 더해준다.
import re
def solution(dartResult):
ans = 0
tokens =re.split(r'(\D)',dartResult)
tokens = list(filter(('').__ne__, tokens))
prev = 0
num = 0
for i in range(1, len(tokens)):
chr = tokens[i]
if(chr == 'S'):
num = int(tokens[i-1])
elif (chr == 'D'):
num = int(tokens[i-1]) * int(tokens[i-1])
elif (chr == 'T'):
num = int(tokens[i-1]) * int(tokens[i-1]) * int(tokens[i-1])
else : continue
if i < len(tokens) - 1:
if tokens[i+1] == '*':
num *= 2
ans += prev
elif tokens[i+1] == '#':
num *= (-1)
ans += num
prev = num
num = 0
return ans
다른 사람의 풀이
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
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
#dart = [('1', 'D', ''), ('2', 'S', '#'), ('10', 'S', '')]
\d 는 숫자 0~9 를 의미한다
그런데 점수가 한자리 수일 수도 있고, 두자리일 수도 있다.
10T 였을때
\d 를 사용하면 1을
\d+를 사용하면 10을 리턴할 것이다
예시)
1. /d+
re.findall("\d+","2030년 카카오 블라인드 채용 1차 지원자 99999명")
>> ['2030', '1', '99999']
2. /d
re.findall("\d","2030년 카카오 블라인드 채용 1차 지원자 99999명")
>> ['2', '0', '3', '0', '1', '9', '9', '9', '9', '9']
? : 앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용)
나머지 공부
정규표현식
728x90
반응형
'개발 > Algorithm 문제 풀이' 카테고리의 다른 글
[Python] 카카오 2018 - 비밀 지도 (0) | 2020.08.18 |
---|---|
[Python] 카카오 2019 채용 - 후보키 (0) | 2020.08.18 |
[Python] 카카오 2019 인턴쉽 - 인형 뽑기 게임 (0) | 2020.08.16 |
[Python] 카카오 2020 인턴쉽 - 경주로 건설 (BFS) (0) | 2020.08.16 |
[Python] 카카오 2020 인턴쉽 코딩테스트 - 보석쇼핑 (0) | 2020.08.15 |