https://programmers.co.kr/learn/courses/30/lessons/42893
고통스러웠다 정규식을 나름 조금씩 해봤다고 생각했는데 전혀 모르는 개념이 많았다.
특히 findall 이랑 search + group 차이를 이번에 깨달았고
\w, \W, \s, \S, + , * [ ] 등 다양한 메타 문자를 배우게 된 계기가 됐다..
테스트 케이스가 많이 없으면 확실히 어렵다
나의 풀이
import re
from collections import defaultdict
def solution(word, pages):
# 현재 페이지 URL 주소 구하기 content 뒤에 공백이 아닌것들을 그룹핑
url = re.compile(r'<meta property="og:url" content="(\S+)"')
# 단어 구하기 영문 대소문자
words = re.compile(r'[a-z|A-Z]+')
# 하이퍼 링크 구하기 a 태그 href 사이의 https로 시작하고 공백 없는것으로 그룹핑
outer_link = re.compile(r'<a href="(https://[\S]+)"')
score_dict = defaultdict(list)
link_score = defaultdict(int)
page_list = []
for page in pages:
m = url.search(page)
page_url = m.group(1)
word_list = words.findall(page.lower())
outer_link_list = outer_link.findall(page)
# word 리스트에서 단어랑 매치되는 개수
basic_score = word_list.count(word.lower())
page_list.append(page_url)
score_dict[page_url] = [basic_score,len(outer_link_list)]
for link in outer_link_list:
link_score[link] += basic_score/len(outer_link_list)
max_score = -1.0
max_index = -1
for idx, page in enumerate(page_list):
page_score = float(score_dict[page][0]) + float(link_score[page])
if max_score < page_score:
max_score = page_score
max_index = idx
return max_index
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 기지국 설치 (Python) (0) | 2021.11.23 |
---|---|
[프로그래머스] 블록 이동하기 (Python) (0) | 2021.11.18 |
[프로그래머스] 외벽 점검 (Python) (0) | 2021.11.18 |
[프로그래머스] 모두 0으로 만들기 (Python) (0) | 2021.11.17 |
[프로그래머스] 입양 시각 구하기(2) (MySQL) (0) | 2021.11.17 |
댓글