Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

잠 안 올 때 끄적끄적

[프로그래머스/파이썬/python3] Lv1. [1차] 다트 게임 본문

코딩/프로그래머스

[프로그래머스/파이썬/python3] Lv1. [1차] 다트 게임

kerp 2023. 2. 2. 16:35

>문제

> 풀이

이게 내 풀인데 풀이가 너무 더러워 보여서.. 눈물이 난다

def solution(dartResult):
    i=0 
    j=0 #0,1,2
    b={"S":"**1","D":"**2","T":"**3"}
    res_li=[0,0,0]

    while (i<len(dartResult)):
        num=""
        while (dartResult[i] in r'["1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"]'):
            num+= dartResult[i]
            i+=1
        res_li[j]=eval(num+b[dartResult[i]])
        i+=1

        if (i<len(dartResult)):
            if dartResult[i] == "#":
                res_li[j]*=(-1)
                i+=1
            elif dartResult[i] == "*":
                res_li[j]*=2
                i+=1
                if j!= 0:
                    res_li[j-1]*=2
            j+=1

    return sum(res_li)

고민을 되게많이했다. 

처음에는 3*3 2차배열 만들어서 풀려고 했는데, 입력값 길이가 고정되지 않아서 어떻게 해야 할 지 모르겠더라고. 

그래서 글자 하나씩 읽어서 if문 때려박아서 했다... 흑

 

그리고 아래는 다른사람들이 푼 내용이다

이사람은 re 이용해서 2차배열을 만들었다. 진짜 훨 깔끔함

regex 문법에 익숙하지 않았는데 이거 보니까 꼭 알고있어야겠다 생각도 들고

numpy는 안되길래  re도 안되려나 싶었는데 그건 또 되나보다.

 

여기는 4번째줄이 너무너무 인상깊어서 가지고왔다. 

list(dartResult) 하면 10이 1,0으로 분리돼서 골치였는데 저런 식으로 대체해버리니까 훨씬 깔끔하고 다루기 편해졌다! 

나도 담에 꼭꼭꼭 써먹어야지