문제) [1차] 다트게임
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
- 내 풀이
- 여러번 실행하면서 계속 코드 변경(시간 오래 걸림)
- 숫자 10을 인식한 방법: 숫자 1와 0이 연속으로 나오는 경우 값을 0을 10으로 변경
- 숫자인지 알파벳인지 확인: isdigit() , isalpha()함수 사용
def solution(dartResult):
n=0 #계산할 점수
answer=0
first=0 #바로 전에 얻은 점수
second=0 #해당 점수
ten=0 #숫자 10을 인식하기 위한 값(1,0 따로 읽는 것 방지하기 위함)
count=0
for dr in dartResult:
count+=1
if dr.isdigit():
if dr=='1':
ten=1
elif dr=='0':
if ten==1:
dr=10
n=int(dr)
elif dr.isalpha():
ten=0 #알파벳이 나오면 숫자 10이 아니므로
if dr=='S':
n**=1
elif dr=='D':
n**=2
elif dr=='T':
n**=3
#변경된 n값을 *계산을 위해 저장
if count==1:
first=n
elif count==2:
second=n
else:
first=second
second=n
#옵션이 없을 수 있으니 미리 더함
answer+=n
if dr=='*':
#더했던 이전 값과 현재 값을 빼고 2배한 값으로 다시 더함
answer-=(first+second)
#first, second가 2배된 값으로 저장되어야 하므로 값 변경 후 더함
first*=2
second*=2
answer+=(first+second)
elif dr=='#':
#더한 값 취소하고 -1배한 값으로 다시 더함
answer-=n
n*=(-1)
answer+=n
#변경된 n값을 *계산을 위해 저장
if count==1:
first=n
elif count==2:
second=n
else:
first=second
second=n
return answer
- 다른 사람 풀이
- 숫자 10을 인식한 방법: replace() 함수로 '10'을 'k'로 치환 후 for문에서 k가 나오면 10으로 출력
- → 문자열 2개 짜리를 문자열 한 개로 치환
- 각각의 계산 값들을 리스트에 넣고 sum()으로 전체 합산
- 📍조건이 될 값이 정해져 있다면 리스트에 넣어서 사용하기
- → sdt=['S', 'D', 'T']
def solution(dartResult):
point=[]
answer=[]
dartResult=dartResult.replace('10','k')
point=['10' if i=='k' else i for i in dartResult]
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)'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] 2016년 (0) | 2022.03.08 |
|---|---|
| [프로그래머스] [Level 1] 가운데 글자 가져오기 (0) | 2022.03.06 |
| [프로그래머스] [Level 1] 같은 숫자는 싫어 (0) | 2022.03.05 |
| [프로그래머스] [Level 1] 나누어 떨어지는 숫자 배열 (0) | 2022.03.05 |
| [프로그래머스] [Level 1] 두 정수 사이의 합 (0) | 2022.03.02 |