반응형

🗓️ 문제 설명

  • 다트 게임은 다트판에 다트를 세차례 던져 그 점수를 합계로 실력을 겨루는 게임입니다.
  • 다트 게임의 점수 계산 로직은 아래와 같습니다.
    1. 다트 게임은 총 3번의 기회로 구성됩니다.
    2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지입니다.
    3. 점수와 함께 single(S), double(D), triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱으로 계산됩니다.
    4. 옵션으로 스타상(*), 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만들고, 아차상(#) 당첨 시 해당 점수만 마이너스됩니다.
    5. 스타상(*)은 첫 번째 기회에서도 나올 수 있는데, 이 경우 첫 번째 스타상(*)의 점수만 2배가 됩니다.
    6. 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있으며, 이 경우 중첩된 스타상(*) 점수는 4배가 됩니다.
    7. 스타상(*)의 효과는 아차상(#)의 효과와 충접될 수 있으며, 이 경우 중첩된 아차상(#) 점수는 -2배가 됩니다.
    8. 영역 single(S), double(D), triple(T)은 점수마다 하나씩 존재합니다.
    9. 스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있습니다.
  • 0 ~ 10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하세요.
  • 입출력 예시
dartResult return
'1S2D*3T' 37
'1D2S#10S' 9
'1D2S0T' 3
'1S*2T*3S' 23
'1D#2S*3S*' 5
'1T2D3D#' -4
'1D2S3T*' 59

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 4번줄 : 다트 결과 속에 10점을 k로 변경
  2. 5번줄 : 다트 결과를 리스트로 저장하고 k를 10으로 저장
  3. 8번줄 : 다트의 영역(S,D,T)을 리스트로 저장
  4. 9번줄 : 다트 결과를 하나씩 꺼내는 반복문 실행
  5. 10번줄 : 값이 다트 영역(S,D,T)이라면 해당 시도의 점수에 연산을 진행하여 저장
  6. 12번줄 : 값이 스타상(*)이라면 해당 시도의 점수에 2배를 하고, 첫 시도가 아니라면 이전 시도의 점수에도 2배를 함
  7. 16번줄 : 값이 아차상(#)이라면 해당 시도의 점수에 -1배를 함
  8. 18번줄 : 값이 점수라면 answer에 추가하고 인덱스에 1을 더해줌
  9. 21번줄 : answer을 총합하여 반환
  • answer에는 숫자만 들어가기 때문에 i(index)를 -1부터 시작하여 숫자를 넣을 때마다 1씩 더해줌

 

 

사용 함수

더보기
  • re.compile('정규표현식') : 찾고자 하는 정규표현식 패턴을 저장
  • pattern.findall('string') : 문자열 속에서 패턴과 같은 형태를 모두 찾아 리스트로 저장
반응형

+ Recent posts