반응형
https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(dartResult):
dartResult = dartResult.replace('10', 'n')
SDT = {"S" : 1, "D" : 2, "T" : 3}
score = []
for c in dartResult:
if c.isdigit() or c == 'n':
if c == 'n':
score.append(10)
else:
score.append(int(c))
elif c in SDT:
c_score = score.pop()
c_score = c_score ** SDT[c]
score.append(c_score)
elif c == '*':
score[-1] *= 2
if len(score) > 1:
score[-2] *= 2
elif c =='#':
score[-1] *= (-1)
return sum(score)
입력으로 들어오는 다트점수 dartResult
에는 0~10까지의 정수가 존재합니다.
반복문으로 단어 하나하나씩 확인하게 되면 10
과 같은 경우는 1
, 0
으로 확인될 수 있기 때문에
먼저 10
을 문자 n
으로 변경하였습니다.
각 영역 당첨시 점수에 쉽게 제곱을 계산하기 위하여 딕셔너리 자료구조로 바꾸어주었습니다.
- S : 1
- D : 2
- T : 3
dartResult
의 각 요소를 하나씩 확인하면서
먼저 요소 c
가 정수
거나 'n'
(10)이라면 해당 점수를 score
에 저장합니다.
만약 요소 c
가 S
, D
, T
라면 score.pop()
을 하여 score
에 저장되어있는 가장 마지막을 값을 추출하여 영역에 맞는 값을 제곱합니다.
- score에 저장되어있는 가장 마지막 값은 각 기회에 얻었던 점수입니다.
c
가 *
(스타상)이라면 해당점수score[-1]
에 2배를 해주고, 만약 *
(스타상)이 첫 번째 기회가 아닌경우 즉 len(score) > 1
인 경우에는 바로 전에 얻은 점수 score[-2]
에도 2배를 해줍니다.
c가 #
(아차상)이라면 해당 점수score[-1]
을 -1
을 곱하여 마이너스합니다.
이렇게 구한 score
을 모두 더하여 결과를 반환합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 기능개발 파이썬(Python) (0) | 2023.02.06 |
---|---|
[코딩테스트] 백준 촌수계산 파이썬(python) (0) | 2023.02.02 |
[코딩테스트] 프로그래머스 [카카오 인턴] 키패드 누르기 파이썬(Python) (0) | 2023.01.31 |
[코딩테스트] 프로그래머스 무인도 여행 파이썬(Python) (0) | 2023.01.30 |
[코딩테스트] 프로그래머스 오픈채팅방 파이썬(Python) (0) | 2023.01.27 |