programmers- lv.1 (다트게임)

이예송·2023년 7월 6일

PS

목록 보기
9/97

문제링크: 다트게임

✍🏻 Information

content
언어python
난이도⭐️⭐️
풀이시간1시간
제출횟수3
인터넷검색유무yes




🍒 My Code

def solution(dartResult):
    answer = 0    
    score = [] #점수가 순서대로 넣어진 배열
    bonus = [] #보너스가 순서대로 넣어진 배열
    option = [] #옵션이 순서대로 넣어진 배열 (옵션 없으면 빈칸으로 들어감)    
    bonusidx = [] #dartResult에서 bonus가 있는 위치(인덱스값)
    
    Sidx = 0
    Didx = 0
    Tidx = 0
    while Sidx != -1:
        Sidx = dartResult.find('S',Sidx+1)
        if Sidx != -1:
            bonusidx.append(Sidx)
    while Didx != -1:
        Didx = dartResult.find('D',Didx+1)
        if Didx != -1:
            bonusidx.append(Didx)
    while Tidx != -1:
        Tidx = dartResult.find('T',Tidx+1)
        if Tidx != -1:
            bonusidx.append(Tidx)
            
    bonusidx.sort()
    
    for i in bonusidx:
        #점수 score 배열에 추가
        if i-2>=0 and dartResult[i-2]=='1':
            now_score = int(dartResult[i-2])*10+int(dartResult[i-1])
        else:
            now_score = int(dartResult[i-1])
        score.append(now_score)
        #옵션 option 배열에 추가
        if i+1<len(dartResult) and dartResult[i+1]=='*':
            option.append('*')
        elif i+1<len(dartResult) and dartResult[i+1]=='#':
            option.append('#')
        else:
            option.append(' ')
        #보너스 bonus 배열에 추가   
        if dartResult[i]=='S':
            bonus.append('S')                          
        elif dartResult[i]=='D':
            bonus.append('D')           
        elif dartResult[i]=='T':
            bonus.append('T')

    for i in range(len(score)-1,-1,-1):
        #보너스에 따라 점수 처리
        if bonus[i]=='D': #D면 점수^2
            score[i]=(score[i]**2)
        elif bonus[i]=='T': #T면 점수^3
            score[i]=(score[i]**3)
        #뒷 option이 *면 앞 점수도 2배 해주어야하는것 처리   
        if i+1<len(option) and option[i+1]=='*':
            score[i]=score[i]*2     
        #옵션에 따라 점수 처리   
        if option[i]=='*':
            answer+=score[i]*2
        elif option[i]=='#':
            answer-=score[i]
        else:
            answer+=score[i]

    return answer




💡 What I learned

  • 아래와 같이 split할 수도 있다
result = re.split(r'S|D|T',dartResult)
  • 좋다고 생각한 풀이
    -> point 배열을 저렇게 처리한 점이 인상깊었다
    list 안에 if-else문:
    [ 조건 만족 시 출력값 if 조건 else 조건 불만족 시 출력 값 for i in data]
ex : [x+1 if x >= 45 else x+5 for x in l]
def solution(dartResult):
    point = []
    answer = []
    dartResult = dartResult.replace('10','k')
    point = ['10' if i == 'k' else i for i in dartResult]
    print(point)

    i = -1
    sdt = ['S', 'D', 'T']
    for j in point:
        if j in sdt :
            answer[i] = answer[i] ** (sdt.index(j)+1)
        elif j == '*':
            answer[i] = answer[i] * 2
            if i != 0 :
                answer[i - 1] = answer[i - 1] * 2
        elif j == '#':
            answer[i] = answer[i] * (-1)
        else:
            answer.append(int(j))
            i += 1
    return sum(answer)

-> k로 바꿔서 10으로 해준 이유: 저렇게 해야 list안에 10을 담을 수 있음. 안그러면 [10] 이 아니라 [1, 0] 처럼 담기게 됨

  • 수빈이 풀이
def solution(dartResult):
    answer = 0
    alpabetcnt = 0
    calculateList = [0,]
    tmp_num = ''
    for i,item in enumerate(dartResult):
        if(""==item):
            calculateList[alpabetcnt]= 2
            calculateList[alpabetcnt-1] = 2
            tmp_num = ''
        elif("#"==item):
            calculateList[alpabetcnt] = (-1)calculateList[alpabetcnt]
            tmp_num = ''
        elif("S"==item):
            alpabetcnt+=1
            calculateList.append(int(tmp_num))
            tmp_num = ''
        elif("D"==item):
            alpabetcnt+=1
            calculateList.append(int(tmp_num) * int(tmp_num))
            tmp_num = ''
        elif("T"==item):
            alpabetcnt+=1
            calculateList.append(int(tmp_num) * int(tmp_num) * int(tmp_num))
            tmp_num = ''
        else:
            tmp_num += item
        answer = sum(calculateList)
    return answer

0개의 댓글