본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 programmers] [1차] 다트 게임

by ggyongi 2021. 4. 27.
반응형

programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

코드를 금방 짰는데도 사소한 실수때문에 굉장히 오래 걸렸다. 

아래 for 문 속 lst[i]가 #또는 *인 경우에 score[-1]에 적절한 조취를 취해주는 것인데

처음에 이걸 score[i-1]로 해서 계속 범위 오류가 발생했다.

i마다 스코어에 값이 매번 들어가는 것이 아닌데 i-1을 하면 분명 틀린 것이다. 이런 사소한 실수를 조심해야한다.

def solution(dartResult):
    lst = []
    sub = ''
    for result in dartResult:
        if result.isdigit():
            sub += result
        elif result.isalpha():
            sub += result
            lst.append(sub)
            sub = ''
        elif result in "#*":
            lst.append(result)
    
    score = []
    
    for i in range(len(lst)):
        if lst[i] == "#": # multiply previous score by -1
            score[-1] *= -1
        elif lst[i] == '*': # multiply previous two scores by 2
            score[-1] *= 2
            if i>=2:
                score[-2] *= 2
        else :
            if lst[i][-1] == 'S':
                point = int(lst[i][:-1]) 
            elif lst[i][-1] == 'D':
                point = int(lst[i][:-1])**2
            else:
                point = int(lst[i][:-1])**3
            score.append(point)
    return sum(score)

윗 부분과 아래 부분을 다음과 같이 조금 더 간결하게 작성할 수도 있다.

def solution(dartResult):
    lst = ''
    for w in dartResult:
        lst += w
        if w in "SDT#*":
            lst += " "
    lst = lst.split()
    
    score = []
    bonus = {'S':1,'D':2,'T':3}
    for dart in lst:
        if dart == "#": 
            score[-1] *= -1
        elif dart == '*':
            score[-1] *= 2
            if len(score)>=2:
                score[-2] *= 2
        else :
            point = int(dart[:-1])**bonus[dart[-1]]
            score.append(point)
    return sum(score)
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글