programmers | Lv1. λ‹€νŠΈ κ²Œμž„ [Python]

yeonkΒ·2022λ…„ 3μ›” 14일
0

algorithm

λͺ©λ‘ 보기
66/88
post-thumbnail

πŸ’‘ Python 3






πŸ”— 문제

[1μ°¨] λ‹€νŠΈ κ²Œμž„ [Link]






πŸ’» μ½”λ“œ

def solution(dR):
    dR = dR.replace('10', 'N')
    result = []
    for i, s in enumerate(dR):
        if s == 'N': s = '10'     
        if s.isdigit():
            k = int(s)
            if dR[i+1] == 'D': k **= 2
            elif dR[i+1] == 'T': k **= 3
            result.append(k)
            
        if i ==2 and s == '*':
            r1 = result.pop()*2
            result.append(r1)
        elif i != 2 and s == '*':
            r1 = result.pop()*2
            r2 = result.pop()*2
            result.append(r2)
            result.append(r1)
        elif s == '#':
            result.append(result.pop()*(-1))
    return sum(result)






πŸ’₯ λ‹€λ₯Έ μ‚¬λžŒ μ½”λ“œ

μ •κ·œν‘œν˜„μ‹ ν™œμš©.

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
  • \d+: ν•˜λ‚˜ 이상 μ—°κ²°λœ 숫자

    • \d: 숫자 1κΈ€μž
    • + : ν•˜λ‚˜ 이상
  • findall(): μ •κ·œμ‹κ³Ό λ§€μΉ˜λ˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄μ„ λ¦¬μŠ€νŠΈν˜•μ‹μœΌλ‘œ 리턴

κΈ€λ§Œλ΄μ„œλŠ” 무슨 μ†Œλ¦°μ§€ 잘 λͺ¨λ₯΄κ² μ–΄μ„œ print 찍어봀닀.



dR = "1S2D*3T"
def solution(dartResult):
    import re
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    dart = p.findall(dartResult)
	print(dart)

# output
	[('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')]






참고 자료

[파이썬] μ •κ·œν‘œν˜„μ‹(regular expression)
μ •κ·œν‘œν˜„μ‹ #2
04 λͺ¨λ“  λ¬Έμžμ—΄ νŒ¨ν„΄ μ°ΎκΈ° (findall)

0개의 λŒ“κΈ€