반응형
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 | 31 |
Tags
- 앱제작
- 밸만포드알고리즘
- 투포인터
- 코딩테스트
- 백준
- 투잡
- 부수입
- 파이썬
- 2018캐시
- 밸만포드
- 코딩테스크
- 2018카카오
- 코테
- ai부수입
- 구글애드몹
- 프로그래머스
- DP
- pccp
- 바이브코딩
- AI논문
- 에라스테네스의 체
- 2020카카오
- 논문추천
- 브루드포스
- 2021카카오
- 코딩오류
- 백트레킹
- 그리디
- 콜랩오류
- Python
Archives
- Today
- Total
kiteday 님의 블로그
[프로그래머스-파이썬] 다트게임 (feat. re 정규식 사용법) 본문
반응형
SMALL
https://school.programmers.co.kr/learn/courses/30/lessons/17682
파이썬 정규식 re를 사용하는 방법이 이 문제 풀이의 킥이다.
| 함수 | 목적 | 설명 |
| re.match() | 문자열 시작부터 검색 | 문자 처음부터 정규식과 일치하는 지 확인 |
| re.search() | 문자열 전체 검색 | 문자열 전체를 검색하여 정규식과 가장 먼저 일치하는 패턴을 찾음. 일치하면 'Match Object' 반환 |
| re.findall() | 모든 일치패턴 검색 | 정규식과 일치하는 패턴을 찾아 리스트로 반환 |
| re.sub() | 패턴 치환 | 정규식과 일치하는 패턴을 문자열로 변환하여 리스트 반환 |
| 문자 | 설명 | 예시 |
| . | 모든 한 문자와 일치 (줄바꿈 \n 제외) | a.b → acb, a1b |
| ^ | 문자열의 시작 |
^Hello → Hello World는 일치, Say Hello는 불일치
|
| $ | 문자열의 끝 |
World$ → Hello World는 일치, World!는 불일치
|
| * | 0회 이상 반복 |
a*b → b, ab, aaab
|
| + | 1회 이상 반복 |
a+b → ab, aaab (단, b는 불일치)
|
| ? | 0회 또는 1회 반복 | a?b → b, ab |
| {n} | 정확히 n회 반복 | a{3}b → aaab |
| {n,m} | n회 이상 m회 이하 반복 |
a{2,4}b → aab, aaab, aaaab
|
| ` | ` | OR (선택) |
| () | 그룹화 |
패턴의 일부를 묶거나 추출할 때 사용
|
| [] | 문자 세트 (괄호 안의 문자 중 하나) |
[abc] → a, b, c 중 하나
|
| 클래스 | 설명 | 예시 |
| \d | 모든 숫자 ([0-9]) | |
| \D | 숫자가 아닌 문자 | |
| \w |
단어 문자 (알파벳, 숫자, 언더스코어 _)
|
|
| \W |
단어 문자가 아닌 문자
|
|
| \s |
공백 문자 (스페이스, 탭, 줄바꿈)
|
|
| \S |
공백 문자가 아닌 문자
|
이런 정규식 규칙에 따라서 식을 완성했다.
import re
def solution(dartResult):
answer = 0
pattern = r"(10|[0-9])([SDT])([*#]?)"
results = re.findall(pattern, dartResult)
# print(results)
scores = []
for i, dart in enumerate(results):
score = int(dart[0])
if dart[1] == 'D':
score = score**2
elif dart[1] == 'T':
score = score**3
if dart[2]:
if dart[2] == '*':
if i > 0:
scores[i-1] *= 2
score *= 2
elif dart[2] == '#':
score = -score
scores.append(score)
# print(scores)
return sum(scores)
pattern에서 "10|[0-9]"인 부분은 정확히 0부터 10을 의미하지만 더 넓은 포괄적 의미로 "\d+"나 "\d{1,2}"로 해도 괜찮다.
LIST
'코딩테스트' 카테고리의 다른 글
| [프로그래머스-파이썬] 퍼즐게임 챌린지 (0) | 2025.12.16 |
|---|---|
| [프로그래머스-파이썬] 압축 (0) | 2025.12.08 |
| [프로그래머스-파이썬] 캐시 (0) | 2025.12.08 |
| [프로그래머스-파이썬] 뉴스클러스터링 (0) | 2025.12.08 |
| [프로그래머스-파이썬] 경주로신설 (0) | 2025.12.05 |