본문 바로가기
Algorithm/프로그래머스

[프로그래머스] - 매칭점수 (파이썬)

by 2HS 2022. 2. 15.
# 매칭점수

from operator import indexOf
import re


def solution(word, pages):
    pages_info = []
    for i, page in enumerate(pages):
        temp = list(seperate(word, page)) + [0, i]
        pages_info.append(temp)
    for page in pages_info:
        url, basic_score, link_num, links, link_score, index = page
        for link in links:
            for page in pages_info:
                if link == page[0]:
                    page[4] += basic_score / link_num
    pages_info.sort(key=lambda x: -(x[1]+x[4]))
    return pages_info[0][5]


def seperate(word, page):
    basic_score = 0
    for f in re.findall(r'[a-zA-Z]+', page.lower()):
        if f == word.lower():
            basic_score += 1
    url = re.search('<meta property="og:url" content="(\S+)"', page).group(1)
    external_links = re.findall('<a href="(https://[\S]*)"', page)
    external_links_num = len(external_links)

    return url, basic_score, external_links_num, external_links

 

2019 카카오 블라인드 - 6번

1. 모든 페이지마다 [url, basic_score, links_num, links, link_score, index]를 만들어서 pages_info리스트에 추가해준다.

    - seperate : 각페이지마다 자신의 url, 기본점수, 링크의 수, 링크들 을 검색해서 반환하는 함수

2. pages.info를 기본점수와 링크점수의 합을로 내림차순 정렬

3. 가장 큰 값의 인덱스 return

 

 

정규표현식을 모르면 절대 못푼다고 장담한다. 파이썬의 정규표현식을 안다룬지 오래됐어서 구글링했다...

나머지 로직은 굉장히 쉽다.