프로그래머스/Python

[프로그래머스] [1차] 다트 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

우당탕탕 개발자 2023. 8. 10. 13:23
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

  1. 각 다트별 점수를 저장할 리스트를 생성한다. score = list()
  2. 다트의 점수를 저장할 변수를 생성하고 문자로 입력받기 때문에 공백으로 초기화한다. num = ''
  3. 다트 점수 문자열을 하나씩 추출한다. for i in dartResult
  4. 만약 추출한 문자가 S이면 if (i == 'S')
  5. Single이므로 다트 점수에 1 제곱 한 점수를 리스트에 추가한다. score.append(int(num) ** 1)
  6. 다음 다트 점수 저장을 위해 다트 점수는 초기화한다. num = ''
  7. 만약 추출한 문자가 D이면 elif (i == 'D')
  8. Double이므로 다트 점수에 2 제곱 한 점수를 리스트에 추가한다. score.append(int(num) ** 2)
  9. 다음 다트 점수 저장을 위해 다트 점수는 초기화한다. num = ''
  10. 만약 추출한 문자가 T이면 elif (i == 'T')
  11. Triple이므로 다트 점수에 3 제곱 한 점수를 리스트에 추가한다. score.append(int(num) ** 3)
  12. 다음 다트 점수 저장을 위해 다트 점수는 초기화한다. num = ''
  13. 만약 추출한 문자가 *이면 elif (i == '*')
  14. 점수 리스트 원소 개수가 1개일 경우 if (len(score) == 1)
  15. 점수 하나만 2배로 바꿔주고 score[0] *= 2
  16. 점수 리스트 원소 개수가 2개 이상일 경우 else
  17. 점수 리스트에서 최신 점수 2개만 2배로 바꿔준다. score[-1] *= 2  score[-2] *= 2
  18. 만약 추출한 문자가 #이면 elif (i == '#')
  19. 가장 최근 점수를 빼주기 위해 음수로 바꿔준다. score[-1] *= -1
  20. 반면에 추출한 문자가 그 외의 문자(숫자)이면 else
  21. 다트 점수에 문자 그대로 추가해 준다. num += i
  22. 다트 점수를 모두 계산했다면 다트 점수를 모두 더해준 결과가 답이다. answer = sum(score)
반응형

3. 소스코드

def solution(dartResult):
    answer = 0
    
    score = list()
    num = ''
    for i in dartResult:
        if (i == 'S'):
            score.append(int(num) ** 1)
            num = ''
        elif (i == 'D'):
            score.append(int(num) ** 2)
            num = ''
        elif (i == 'T'):
            score.append(int(num) ** 3)
            num = ''
        elif (i == '*'):
            if (len(score) == 1):
                score[0] *= 2
            else:
                score[-1] *= 2
                score[-2] *= 2
        elif (i == '#'):
            score[-1] *= -1
        else:
            num += i
            
    answer = sum(score)
    return answer
728x90
반응형