본문 바로가기

알고리즘/프로그래머스

[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Python] 매칭 점수

[ 문제 ]

 


[출제 의도]

 

  • 정규표현식 활용

[ 문제 풀이 ]

 

먼저, 정규표현식으로 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>"]))