Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로그래머스
- 구현
- dp
- Level1
- python3
- 파이썬 3
- 이코테
- U_stage
- 부스트캠프_AITech_3기
- mrc
- Level2_PStage
- 다이나믹프로그래밍
- 단계별문제풀이
- 그래프이론
- 부스트캠프_AITech3기
- 알고리즘_스터디
- ODQA
- 기술면접
- 최단경로
- 알고리즘스터디
- Level2
- 개인회고
- 다시보기
- 백준
- 주간회고
- dfs
- 그리디
- 백트랙킹
- 정렬
- 이진탐색
Archives
- Today
- Total
국문과 유목민
39. 다트확률 구하기 본문
0. 문제
링크) https://programmers.co.kr/learn/courses/30/lessons/17682
1. 알고리즘 계획
※ 일부 알고리즘을 검색함
- 초기에 방향성을 잡지 못해서, '정규식'에 대한 키워드를 검색했다.
- 정규식을 이용해 문자열을 슬라이싱한다.
- 각 부분에 해당하는 부분들을 if문으로 나눠 구분한다.
- 자주 사용되는 부분은 다른 함수로 빼서 코드를 단축시킨다.
- #이나 *의 기호의 경우 특수한 경우로서 한 번 더 생각해줘야 한다.
2. 나의 코드
import re
def solution(dartResult):
# 정규식 이용
p = re.compile('\d+\D[*#]?')
ls = p.findall(dartResult)
answer = []
for i in ls:
if i[-1] in ['S', 'D', 'T']:
answer.append(change(i))
elif i[-1] == "*":
answer.append(change(i[:-1]))
answer[-1] *= 2
answer[-2:-1] *= 2
elif i[-1] == "#":
answer.append(change(i[:-1]))
answer[-1] *= (-1)
return sum(answer)
def change(i):
if i[-1] == 'S':
return int(i[:-1])**1
elif i[-1] == 'D':
return int(i[:-1])**2
elif i[-1] == 'T':
return int(i[:-1])**3
- 개인적으로 마음에 들지않은 코드라고 생각한다.
- 물론 처음에 생각했던 switch-case문보다 낫다고는 하지만,
- 새로 만든 함수를 3번이나 식에 넣었어야 하기 때문에 아쉽다고 생각한다.
3. 다른 사람의 코드
def solution2(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3} # switch문 대신 dict형을 사용 / dict형 사용법에 대한 이해 필요
option = {'' : 1, '*' : 2, '#' : -1}
# 정규식으로 찾아냄
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
return sum(dart)
- 우선 딱 봐도 코드의 길이가 짧다.
- 우선 문자들에 해당하는 값을 '딕셔너리'형으로 만들었다는 점에서 참신하다고 생각했다.
- 정규식을 괄호로 묶으면 각각이 리스트가 된다는 점도 처음 알았다. (★)
4. 정리 및 리뷰
- 간소화된 코드들을 보면 대체적으로 '리스트'형만을 사용하는 것이 아니라 '딕셔너리'형도 자주 나오는 것을 확인할 수 있었다.
- '정규형'에 대해서는 이전에 배우긴 했었지만 제대로 쓰지는 못헀던 것 같다. 정규형 형식에 대해서 알아두는 것도 굉장히 좋을 것 같다. 이에 대해서 시간을 내서 암기를 해야겠다.
코드 만족도: ★★★★☆
'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글
40. 키패드 누르기 (0) | 2020.09.12 |
---|---|
38. 실패율 (0) | 2020.09.12 |
37. 비밀지도 찾기 (0) | 2020.09.12 |
36. 예산 (0) | 2020.09.12 |
35. 별 찍기 (0) | 2020.09.12 |
Comments