본문 바로가기
PROGRAMMERS

[프로그래머스] - 매칭 점수 (LEVEL 3)

by 나른한 사람 2021. 3. 10.

programmers.co.kr/learn/courses/30/lessons/42893?language=python3

 

코딩테스트 연습 - 매칭 점수

매칭 점수 프렌즈 대학교 조교였던 제이지는 허드렛일만 시키는 네오 학과장님의 마수에서 벗어나, 카카오에 입사하게 되었다. 평소에 관심있어하던 검색에 마침 결원이 발생하여, 검색개발팀

programmers.co.kr

문자열 파싱문제

 

하는 방법만 알면 간단한 문제이지만, 실수하지 않도록 조심해야함

 

<Solution>

-re.search( ).group(1)은 search에서 소괄호로 묶인 부분만을 return 함

^ : 뒤의 문자 제외

[ ] : [ ] 사이의 문자들과 매치

\s : whitespace ( 공백, \n, \t, \r, \v, \f )와 매치됨

\S : whitespace가 아닌 것과 매치

\w : 문자+숫자와 매치

\W : ~\w

\d : 숫자

\D : ~\d

import re
def parsing(word,page):
    page = re.sub('\s',' ',page).lower()
    word = word.lower()
    url = re.search('<meta[^>]*content="https://([\S]*)"/>', page).group(1)
    words = re.findall('[a-z]+',page)
    score = 0
    for w in words:
        if w==word: score+=1
    links_parse = re.findall(r'<a href="https://[\S]*">', page)
    links = []
    for link in links_parse:
        links.append(re.search(r'"https://([\S]*)"',link).group(1))
    return url, score, links
    
def solution(word, pages):
    info = dict()
    scores = [0]*len(pages)
    for i, page in enumerate(pages):
        url, score, links = parsing(word,page)
        info[url] = [score, links, i]
        scores[i] = score
    for url in info:
        score, links, idx = info[url]
        for turl in links:
            if turl in info:
                scores[info[turl][2]] += score/len(links)
    return scores.index(max(scores))

댓글