문제링크: 다트게임
✍🏻 Information
| content | |
|---|---|
| 언어 | python |
| 난이도 | ⭐️⭐️ |
| 풀이시간 | 1시간 |
| 제출횟수 | 3 |
| 인터넷검색유무 | yes |
🍒 My Code
def solution(dartResult):
answer = 0
score = [] #점수가 순서대로 넣어진 배열
bonus = [] #보너스가 순서대로 넣어진 배열
option = [] #옵션이 순서대로 넣어진 배열 (옵션 없으면 빈칸으로 들어감)
bonusidx = [] #dartResult에서 bonus가 있는 위치(인덱스값)
Sidx = 0
Didx = 0
Tidx = 0
while Sidx != -1:
Sidx = dartResult.find('S',Sidx+1)
if Sidx != -1:
bonusidx.append(Sidx)
while Didx != -1:
Didx = dartResult.find('D',Didx+1)
if Didx != -1:
bonusidx.append(Didx)
while Tidx != -1:
Tidx = dartResult.find('T',Tidx+1)
if Tidx != -1:
bonusidx.append(Tidx)
bonusidx.sort()
for i in bonusidx:
#점수 score 배열에 추가
if i-2>=0 and dartResult[i-2]=='1':
now_score = int(dartResult[i-2])*10+int(dartResult[i-1])
else:
now_score = int(dartResult[i-1])
score.append(now_score)
#옵션 option 배열에 추가
if i+1<len(dartResult) and dartResult[i+1]=='*':
option.append('*')
elif i+1<len(dartResult) and dartResult[i+1]=='#':
option.append('#')
else:
option.append(' ')
#보너스 bonus 배열에 추가
if dartResult[i]=='S':
bonus.append('S')
elif dartResult[i]=='D':
bonus.append('D')
elif dartResult[i]=='T':
bonus.append('T')
for i in range(len(score)-1,-1,-1):
#보너스에 따라 점수 처리
if bonus[i]=='D': #D면 점수^2
score[i]=(score[i]**2)
elif bonus[i]=='T': #T면 점수^3
score[i]=(score[i]**3)
#뒷 option이 *면 앞 점수도 2배 해주어야하는것 처리
if i+1<len(option) and option[i+1]=='*':
score[i]=score[i]*2
#옵션에 따라 점수 처리
if option[i]=='*':
answer+=score[i]*2
elif option[i]=='#':
answer-=score[i]
else:
answer+=score[i]
return answer
💡 What I learned
result = re.split(r'S|D|T',dartResult)
list 안에 if-else문:[ 조건 만족 시 출력값 if 조건 else 조건 불만족 시 출력 값 for i in data] ex : [x+1 if x >= 45 else x+5 for x in l]
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)
-> k로 바꿔서 10으로 해준 이유: 저렇게 해야 list안에 10을 담을 수 있음. 안그러면 [10] 이 아니라 [1, 0] 처럼 담기게 됨
def solution(dartResult):
answer = 0
alpabetcnt = 0
calculateList = [0,]
tmp_num = ''
for i,item in enumerate(dartResult):
if(""==item):
calculateList[alpabetcnt]= 2
calculateList[alpabetcnt-1] = 2
tmp_num = ''
elif("#"==item):
calculateList[alpabetcnt] = (-1)calculateList[alpabetcnt]
tmp_num = ''
elif("S"==item):
alpabetcnt+=1
calculateList.append(int(tmp_num))
tmp_num = ''
elif("D"==item):
alpabetcnt+=1
calculateList.append(int(tmp_num) * int(tmp_num))
tmp_num = ''
elif("T"==item):
alpabetcnt+=1
calculateList.append(int(tmp_num) * int(tmp_num) * int(tmp_num))
tmp_num = ''
else:
tmp_num += item
answer = sum(calculateList)
return answer