[Programmers] - 다트 게임

오동훈·2021년 4월 27일
0

Programmers

목록 보기
29/64
post-thumbnail

1. Problem 📃

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

다음 문제는, 문제에서 주어진 조건들에 맞춰 결과값을 도출하는 문제입니다.

2. Logic 👨‍🏫

  1. 파라미터로 들어온 값이 S, D, T라면 index(처음에만 0)값과, i-1번째까지의 값이 숫자라는 점을 이용했고, 그 다음 pow 함수를 이용해 계산한 후 tmp라는 리스트에 추가해주었다.
  2. 그리고 index는 현재 i값 저장
  3. 파라미터로 들어온 값이 * 일 때, tmp 리스트의 마지막 값을 2배해준다.
  4. 그리고 tmp 리스트에 값이 2개 이상 존재한다면 그 앞의 값도 2배해준다.
  5. 파라미터로 들어온 값이 # 일때 tmp 마지막 값을 -1배 해준다.
  6. tmp의 모든 값을 더해 반환해준다.

3. Code 💻

1. 내가 푼 코드

def solution(dartResult):
    answer = 0
    index = 0
    tmp = []
    for i, v in enumerate(dartResult):
        if (v == 'S' or v == 'D' or v == 'T'):
            if v == 'S':
                tmp.append(pow(int(dartResult[index:i]), 1))
            elif v == 'D':
                tmp.append(pow(int(dartResult[index:i]), 2))
            elif v == 'T':
                tmp.append(pow(int(dartResult[index:i]), 3))
            index = i + 1
        if v == '*':
            tmp[len(tmp)-1] *= 2
            if len(tmp) > 1 and tmp[len(tmp)-2] in tmp:
                tmp[len(tmp)-2] *= 2 
            index = i + 1
        if v == '#':
            tmp[len(tmp)-1] *= -1
            index = i + 1
    answer = sum(tmp)
    return answer

2. 다른 사람이 푼 코드

import re


def solution(dartResult):
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    dart = p.findall(dartResult)
    for i in range(len(dart)):
        if dart[i][2] == '*' and i > 0:
            dart[i-1] *= 2
        dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]

    answer = sum(dart)
    return answer

4. Feedback 📚

다른 사람은 어떻게 풀었나 체킹해봤는데 깔끔하게 푼 사람들중에 정규표현식을 이용해 해결한 코드를 접하게 됐다. 그래서 나도 정규표현식을 알아가는 시간을 가져 보려 한다.

1. re 모듈

- 파이썬은 정규 표현식을 지원하기 위해 re(regular expression의 약어) 모듈을 제공한다. re 모듈은 파이썬을 설치할 때 자동으로 설치되는 기본 라이브러리로 사용 방법은 다음과 같다.

import re
p = re.compile('ab*')
profile
삽질의 기록들🐥

0개의 댓글