일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘문제풀이
- 백준
- Leet Coding Challenge
- 코딩테스트
- dft
- DTFT
- 릿코드
- leetcode
- 코테
- 신호처리
- SWIFT
- IOS
- 스위프트
- 알고리즘 문제풀이
- leet code
- PYTHON
- 코테준비
- 전자공학
- 컨볼루션
- 알고리즘
- backjoon
- 파이썬
- 독서노트
- 트라이
- DSP
- 프로그래머스
- 이산신호처리
- SWIFTUI
- 카카오 코딩테스트
- Trie
Archives
- Today
- Total
매일 매일 성장하는 섭섭군
[Seop's의 코드풀이] 프로그래머스 2018 KAKAO BLIND RECRUITMENT [1차] 다트게임 - Python 본문
알고리즘 문제풀이/프로그래머스
[Seop's의 코드풀이] 프로그래머스 2018 KAKAO BLIND RECRUITMENT [1차] 다트게임 - Python
섭섭군 2020. 5. 3. 13:38반응형
이번에 풀어볼 문제는 2018년도 카카오 블라인드 채용 코딩테스트에 나왔던
다트게임이라는 문제입니다. 문제의 내용은 다음과 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/17682
문제를 요약해 보면 다음과 같다.
1. 문자열은 3개의 점수 구성으로 이루어져 있다.
2. 각각의 숫자의 점수다음에 붙는 S, D, T 는 점수^1, 점수^2, 점수^3을 취하는 조건이다.
3. * 과 #의 옵션이 존재 할 수도 있으며 *은 본 점수와 이전 점수에 2배, #은 본 점수에 -1배를 취한다.
점수를 부여하는 과정은 그렇게 까다롭지 않았지만
한 문자열을 3개로 나누는 작업에서 좀 해매었습니다.
저는 3개의 점수로 나누는 과정을 다음과 같은 방식으로 진행했습니다.
스택을 만들어 숫자 이외의 것들을 저장시킨다.
temp 변수에는 나누게 될 문자열의 시작값을 저장시킨다.
문자열을 탐색해 숫자가 나오고 스택이 비어있지 않다면 문자열[temp : i]의 값을 분류하고 저장한다.
이러한 방법으로 숫자와 다른 문자가 있는 것을 구분하여 진행하였습니다.
점수를 계산 하는 과정은 if 문을 통하여 진행하였습니다.
전체적인 코드는 다음과 같습니다.
피드백과 질문은 언제나 감사드립니다.
def solution(dartResult):
answer = [0,0,0]
score_list = []
tmep = 0
stack = []
# 문자열을 3개로 나누는 작업
for i in range(1, len(dartResult) - 1 ) :
if dartResult[i] >= "0" and dartResult[i] <= "9" :
if stack :
score_list.append(dartResult[tmep : i])
tmep = i
stack = []
else :
stack.append(dartResult[i])
score_list.append(dartResult[tmep : ])
# 나눈 문자열을 조건에 따라 점수를 부여하는 작업
for s in range(3) :
num_buf = ''
bonus = 0
option = []
for i in score_list[s] :
if i >= '0' and i <= '9' :
num_buf += i
elif i == "S" :
bonus = 1
elif i == "D" :
bonus = 2
elif i == "T" :
bonus = 3
elif i == "#" :
option.append(-1)
elif i == "*" :
option.append(2)
# 점수와 bonus는 항상 존재하지만 option은 없을 수도 있기 때문에 배열에 저장
score = pow(int(num_buf), bonus)
if option :
# option이 # 인 경우는 -1을 곱하고 *인 경우는 2를 본 점수와 이전 점수에 곱한다.
if option[0] == -1 :
score = score*-1
else :
if s > 0 :
answer[s-1] = answer[s-1]*2
score *= 2
answer[s] = score
return sum(answer)
print(solution("1S2D*3T"))
반응형
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[Seop's의 코드풀이] 프로그래머스 최고의 집합 - Python (0) | 2020.08.19 |
---|---|
[Seop's의 코드풀이] 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT) - Python (0) | 2020.05.12 |
[Seop's의 코드풀이] 프로그래머스 불량사용자 - Python (0) | 2020.05.06 |
[Seop's의 코드풀이] 프로그래머스 문자열 압축(2020 KAKAO BLIND RECRUITMENT) - Python (0) | 2020.04.23 |
[Seop's의 코드풀이] 프로그래머스 튜플 (2019 카카오 개발자 겨울 인턴십 문제) Python (0) | 2020.04.22 |
Comments