1. 문제
2. 풀이 과정
Python 정규 표현식을 이용하여 parsing을 하였다. 여기서 사용된 정규표현식만 살펴보자면 아래와 같다.
import re
#1. findall
text = "hello my id is a1"
#문자로 이루어진 문자 1개이상으로 구성된 것 모두 찾기
test = re.findall(r'[a-zA-Z]+',text)
print(test)
#['hello', 'my', 'id', 'is', 'a']
#2. search
text = '<head> <meta charset="utf-8"> <meta property="og:url" content="https://a.com"/> </head>'
#다음 패턴으로 이루어진 문장 하나 찾기
#[^>]* = >이 아닌 것 0개 이상으로 구성된 것
#[\S]* = 공백이 아닌 것 0개 이상으로 구성된 것
url_str = re.search(r'<meta[^>]*content="https://([\S]*)"/>',text)
print(li3.group()) #일치하는 문장 전체
print(li3.group(1)) #(그룹) a.com을 반환
소스코드
class Page(object):
def __init__(self, i, url, wcount, links):
self.idx = i
self.myurl = url
self.wcount = wcount
self.outlink = links
def parsing(word, page, i):
import re
#자신의 URL 주소
my_url = re.search(r'<meta[^>]*content="https://([\S]*)"/>', page).group(1)
#단어수
word = word.lower()
words = page.lower()
words = re.findall(r'[a-zA-Z]+', words)
w_count = words.count(word)
#외부 링크 URL
links = re.findall(r'<a href="https://[\S]*">', page)
out_link = []
for link in links:
out_link.append(re.search(r'"https://([\S]*)"', link).group(1))
return Page(i, my_url, w_count, out_link)
def solution(word, pages):
page_objects = []
for i in range(len(pages)):
page_objects.append(parsing(word, pages[i], i))
result = []
for page in page_objects:
score = page.wcount
for p in page_objects:
if page.myurl in p.outlink:
#매칭 점수 = 기본점수(word수) + 링크 점수(외부의 word수/외부의 링크수)
score += p.wcount/len(p.outlink)
result.append((-score, page.idx))
result.sort()
return result[0][1]
'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글
[Java] 여행경로 (0) | 2022.06.27 |
---|---|
[Java] 징검다리* (0) | 2022.06.27 |
[Python] 길 찾기 게임 (0) | 2021.09.11 |
[Python] 무지의 먹방 (0) | 2021.09.10 |
[Python] 후보키 (0) | 2021.09.09 |