S E P H ' S

[Python] 2018 KAKAO BLIND RECRUITMENT [1차] 다트 게임 본문

Algorithm/Programmers

[Python] 2018 KAKAO BLIND RECRUITMENT [1차] 다트 게임

yoseph0310 2021. 7. 8. 15:46
 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

파이썬의 슬라이싱 개념에 아직 덜 익숙해서 옵션부분의 로직을 구현해내는데 어려움이 조금 있었다.

 

def solution(dartResult):
	n = ''
    score = []
    for i in dartResult:
    	if i.isnumeric():
        	n += i
        elif i == 'S':
        	n = int(n) ** 0.5
            score.append(n)
            n = ''
        elif i == 'D':
        	n = int(n) ** 0.5
            score.append(n)
            n = ''
        elif i == 'T':
        	n = int(n) ** 0.5
            score.append(n)
            n = ''
        elif i == '*'
        	if len(score) > 1:
            	score[-2] = score[-2] * 2
                score[-1] = score[-1] * 2
            else:
            	score[-1] = score[-1] * 2
        elif i == '#'
        	score[-1] = score[i] * -1
   
    return sum(score)

 

다른 풀이

def solution(dartResult):
	answer = []
    dartResult = dartResult.replace('10','t')
    point = ['10' if i == 't' 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)

위의 풀이와 차이점이라면

1. 문자열 10을 t로 치환하고 다시 리스트의 요소로 만들기 위해 point에 리스트로 변환했다.

2. 정답이 들어갈 리스트의 인덱스를 따로 i로 두어 관리

3. sdt를 사용하여 보너스를 인덱스로 곱해줌으로써 길어질 수 있는 반복문을 단축했다.