https://programmers.co.kr/learn/courses/30/lessons/42893
from collections import deque
def solution(word, pages):
scores = dict()
# 기본 점수, 외부 링크 리스트
for i in range(len(pages)):
link = get_meta(pages[i])
scores[link] = [i, 0, 0, 0]
scores[link][1] = get_count(pages[i], word)
scores[link][2] = get_a_tags(pages[i])
# 링크 점수
for curr in scores:
for linked in scores[curr][2]:
if linked in scores:
scores[linked][3] += scores[curr][1] / len(scores[curr][2])
# 최대 매칭 점수 인덱스
answer = 0
max_score = float('-inf')
for link in scores:
if max_score < scores[link][1] + scores[link][3]:
max_score = scores[link][1] + scores[link][3]
answer = scores[link][0]
return answer
def get_meta(page):
start = page.index('<head>')
while True:
meta_start = page.index('<meta', start)
meta_end = page.index('>', meta_start)
if page.find('content="', meta_start, meta_end) >= 0:
s = page.find('content="', meta_start, meta_end) + len('content="')
e = page.find('"', s)
return page[s:e]
start = meta_end + 1
def get_count(page, word):
count = 0
page_q = deque(page)
curr_q = deque()
while page_q:
c = page_q.popleft()
if c.isalpha():
curr_q.append(c)
else:
if ''.join(curr_q).upper() == word.upper():
count += 1
curr_q = deque()
return count
def get_a_tags(page):
a_tags = []
start = 0
while True:
if page.find('<a href="', start) < 0:
break
a_start = page.index('<a href="', start)
a_end = page.index('</a>', a_start)
link_start = a_start + len('<a href="')
link_end = page.index('">', link_start)
a_tags.append(page[link_start:link_end])
start = a_end + len('</a>')
return a_tags