728x90
[문제]
2018 KAKAO BLIND RECRUITMENT [1차]
https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[코드]
- 조건문을 사용해 문자열을 나누었다. 문자열 사이의 수를 정수로 변환하기 위해 문자열 슬라이싱 사용
- 시간복잡도: O(n)
def solution(dartResult):
cal, idx = [], 0
for i in range(1, len(dartResult)):
if dartResult[i] in ['S', 'D', 'T']:
cal.append([dartResult[i], int(dartResult[idx:i])]) # 2자리 수도 있어서 슬라이싱 사용
idx = i + 1
elif dartResult[i] == "*" or dartResult[i] == "#":
cal.append([dartResult[i], i])
idx = i + 1
answer = []
for i, j in cal:
if i == 'S': answer.append(j)
elif i == 'D': answer.append(j ** 2)
elif i == 'T': answer.append(j ** 3)
elif i == '*':
if len(answer) > 1: answer[-2] *= 2 # 이전 점수가 있는 경우
answer[-1] *= 2 # 이전 점수가 없으면 현재 점수에만 곱셈
elif i == '#': answer[-1] *= -1
return sum(answer)
[정규식으로 문자열 섹션 분리하는 방법]
- 정규식으로 문자열을 나눌 수 있는 방법이 있었다.
import re
pattern = re.compile(r'(\d+)([SDT])([*#]?)')
matches = pattern.findall(dartResult)
- (\d+): 하나 이상의 숫자 (\d는 숫자를 의미하고, +는 하나 이상을 의미)
- ([SDT]): 문자 'S', 'D', 'T' 중 하나
- ([*#]?): '*' 또는 '#' 문자가 있을 수도 있고 없을 수도 있음 (?는 0개 또는 1개를 의미)
pattern.findall(dartResult)
- dartResult 문자열에서 위 패턴과 일치하는 모든 부분을 찾아 리스트로 반환
- 각 일치 부분은 튜플 형태로 반환
(ex) dartResult가 "1S2D*3T"이면 matches는 [('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')]
- 시간복잡도: O(n)
#정규식 사용해서 문자열 분리하는 방법
import re
def solution(dartResult):
pattern = re.compile(r'(\d+)([SDT])([*#]?)')
matches = pattern.findall(dartResult)
answer = []
for match in matches:
score, mult, option = match
score = int(score)
# 제곱 적용
if mult == 'S': score = score
elif mult == 'D': score = score ** 2
elif mult == 'T': score = score ** 3
# 옵션 적용
if option == '*': score *= 2
if answer:
answer[-1] *= 2
elif option == '#': score *= -1
answer.append(score)
return sum(answer)
- 코딩테스트에서 바로 생각해내려면 손에 익어야 할 것 같다.
반응형
'🚩 Coding Test > Programmers' 카테고리의 다른 글
[Programmers][Python] Lv.1 콜라 문제 (0) | 2024.06.18 |
---|---|
[Programmers][Python] Lv.1 신규 아이디 추천 (0) | 2024.06.16 |
[Programmers][Python] Lv.1 실패율 (0) | 2024.06.16 |
[Programmers][Python] Lv.1 비밀지도 (1) | 2024.06.15 |
[Programmers][Python] Lv.1 푸드 파이트 대회 (0) | 2024.06.14 |