[ 문제 ]
[출제 의도]
- 정규표현식 활용
[ 문제 풀이 ]
먼저, 정규표현식으로 HTML 파일에서 현재 URL, 외부 URL 그리고 검색어를 찾습니다.
외부 URL의 수는 외부 링크 수가 되고, 검색어의 개수는 기본 점수가 됩니다.
각 HTML 파일의 기본 점수 / 외부 링크를 저장해 놓았다가, 해당 웹 페이지와 연결된 다른 웹 페이지의 링크 점수를 구할 때 사용합니다.
마지막으로 페이지마다 (기본 점수와 링크 점수를 더한) 매칭점수를 구하고, 최댓값의 Index를 구합니다.
최댓값이 여러 개라면, Index가 가장 작은 것이 정답입니다.
[ 정답 코드 ]
# 졍규표현식 활용
from collections import defaultdict
import re
def solution(word, pages):
l = len(pages)
page_li = [["", 0, 0] for _ in range(l)] # [현재 링크, 기본 점수, 외부 링크 수]
pre_score = defaultdict(float) # 현재 링크의 (기본 점수 / 외부 링크 수)
follower = defaultdict(list) # {외부 링크 : {현재 링크, 현재 링크, ...}
for idx, page in enumerate(pages):
content = re.search('<meta property="og:url" content="https://([\S]*)"', page).group(1) # content
page_li[idx][0] = content
href = re.findall('<a href="https://([\S]*)"', page) # href
page_li[idx][2] = len(href)
for h in href:
follower[h].append(content)
basic_score = 0
for f in re.findall(r'[a-zA-Z]+', page.lower()): # word
if word.lower() == f:
basic_score += 1
page_li[idx][1] = basic_score
if page_li[idx][2] != 0: # 런타임 에러 방지
pre_score[content] = page_li[idx][1] / page_li[idx][2]
# total
total = []
for idx, pre in enumerate(page_li):
total.append(page_li[idx][1])
for link in follower[pre[0]]:
total[idx] += pre_score[link]
# compare
tmp = total[0]
answer = 0
for idx, score in enumerate(total):
if tmp < score:
tmp = score
answer = idx
return answer
print(solution("Muzi", ["<html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\">\n <meta property=\"og:url\" content=\"https://careers.kakao.com/interview/list\"/>\n</head> \n<body>\n<a href=\"https://programmers.co.kr/learn/courses/4673\"></a>#!MuziMuzi!)jayg07con&&\n\n</body>\n</html>", "<html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\">\n <meta property=\"og:url\" content=\"https://www.kakaocorp.com\"/>\n</head> \n<body>\ncon%\tmuzI92apeach&2<a href=\"https://hashcode.co.kr/tos\"></a>\n\n\t^\n</body>\n</html>"]))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 비밀지도 (0) | 2022.05.03 |
---|---|
[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Python] 오픈채팅방 (0) | 2022.03.31 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][Python] 괄호 변환 (0) | 2022.03.23 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][Python] 문자열 압축 (0) | 2022.03.21 |
[프로그래머스][2021 KAKAO BLIND RECRUITMENT][Python] 합승 택시 요금 (0) | 2022.03.20 |