[Algorithm/Python][프로그래머스] 다트 게임

동글이·2022년 8월 13일
0

Algorithm

목록 보기
20/33

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

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

- 처음 코드에서 더 좋은 접근 방법

  • 숫자 10이 문자열로 되어있어 1과 10의 구별해내는 방법 수정
    -
    dartResult = dartResult.replace('10','k')
    point = ['10' if i == 'k' else i for i in dartResult]
  • 'S', 'D', 'T' 를 배열로 넣어 if 문 한번에 해결

- python 문법 정리

아래 수정한 코드의 문법이 헷갈려서 하는 문법 정리

point = ['10' if i == 'k' else i for i in dartResult]
  • for 문 한줄로

    for i in v:
        print(i)

    ↓ 한줄로

    print([i for i in v])

    ※ 배열 괄호 없애고 이쁘게 출력

    print(" ".join(str(i) for i in v))
          
  • if 문 한줄로

    if v<5:
        print(0)
    else:
        print(1)

    ↓ 한줄로

    print(0 if v<5 else 1)
  • for + if 문 한줄로


- 처음 코드

def solution(dartResult):
    score=[]
    check=0
    now=0
    out=0
    for i in range(len(dartResult)):
        if out==1:
            out=0
            continue
        if dartResult[i]=='T':
            save=save*save*save
            score.append(save)
            now+=1
        elif dartResult[i]=='D':
            save=save*save
            score.append(save)
            now+=1
        elif dartResult[i]=='S':
            score.append(save)
            now+=1
        elif dartResult[i]=='*':
            save*=2
            if check>3:
                pre=score[now-2]
                score[now-2]=pre*2
            score[now-1]=save
        elif dartResult[i]=='#':
            save*=-1
            score[now-1]=save        
        else:
            if dartResult[i]=='1':
                if dartResult[i+1]=='0':
                    save=10
                    out=1
                    continue
            save=int(dartResult[i])
        check+=1
    return sum(score)

- 수정한 방법

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)

✔ 한 일 점검


✔ 내일 목표

  • 백준 or 프로그래머스 - 2문제 이상
  • 스프링 - 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 끝내기
  • 파이썬 - 이코테 강의2
  • 창액 프로젝트 crud
  • 졸작 회의
  • 튜터링 면접..?
  • 운전면허 받으러 가기
  • 캐리비안 숙소 알아보기

✔ 주저리

profile
기죽지 않는 개발자

0개의 댓글