❓ 문제 - 2019 카카오 코딩테스트 매칭점수 문제 - python 풀이법
출처
(https://programmers.co.kr/learn/courses/30/lessons/42893)
📝 문제해결법
1. 문제 해결법의 핵심은 크게 3가지
- 페이지내에서 자신의 url 찾기
- 페이지내에서 외부링크 모두 찾기
- 페이지내에서 모든 검색어 찾기(갯수)
2. 사용되는 알고리즘은 정규표현식 사용
1) search를 사용하면 특정 문자들 사이에 있는 어떠한 문자열을 찾을 수 있다.
url = re.search('<meta property="og:url" content="(\S+)"', page).group(1)
2) findall를 사용하면 내가 찾아야 하는 문자열이나 얼마나 들어있는지와 문자열을 다양한 방법으로 분리할 수 있다.따라서 아래처럼 사용하면 모든 문자열을 찾아서 list형태로 반환해준다.
re.findall(r'[a-zA-Z]+', page.lower())
3. 전체 해결 흐름
- search를 사용해서 자기자신의 url를 찾기
- 일단 모든 문자열을 소문자화 (lower) 시키고 findall를 사용해서 검색어와 비교해서 기본점수 구하기
- findall를 이용해서 모든 외부링크를 구하기
- 나를 가리키는 외부링크들을 담을 수 있는 딕셔너리를 선언하고 해당 key(외부링크)에 value(자기 url)가 존재하는지 확인하여 딕셔너리에 값들을 넣어줌
- webpage 리스트를 이용해서 자기 자신의 url, 기본점수, 외부링크 갯수를 저장
- webpage 리스트의 원소들을 하나씩 가져와서 webpageGraph 딕셔너리를 이용해서 자기를 외부링크로 삼는 다른 링크들의 기본점수와 외부링크 수를 구해서 매칭점수 계산
- 최대값을 계속 갱신하면서 score(매칭점수)의 최대값과 그 값의 인덱스 값을 구함
4. 출처 : 해당 블로그들의 풀이 방법과 소스코드를 참고하여 공부하였습니다.
- (https://onejunu.tistory.com/72)
💻 소스코드
import re
def solution(word, pages):
webpage = []
webpageName = []
webpageGraph = dict() # 나를 가르키는 외부 링크
for page in pages:
url = re.search('<meta property="og:url" content="(\S+)"', page).group(1)
basic_score = 0
for f in re.findall(r'[a-zA-Z]+', page.lower()):
if f == word.lower():
basic_score += 1
ex_Link = re.findall('<a href="(https://[\S]*)"', page)
for link in ex_Link:
if link not in webpageGraph.keys():
webpageGraph[link] = [url]
else:
webpageGraph[link].append(url)
webpageName.append(url)
webpage.append([url, basic_score, len(ex_Link)])
max_Val = 0
result = 0
for i in range(len(webpage)):
url = webpage[i][0]
score = webpage[i][1]
if url in webpageGraph.keys():
for link in webpageGraph[url]:
a, b, c = webpage[webpageName.index(link)]
score += (b / c)
if max_Val < score:
max_Val = score
result = i
return result
🤷 느낀점
이번 해결법은 정규표현식의 해결법을 느끼고 방법을 몰라서 바로 검색했다.. 이번 문제풀이법으로 정규표현식을 html문서에서 어떻게 사용할 수 있는지 배워볼 수 있었다. 따로 정규표현식들을 공부하고 정리해야겠다.😂
'알고리즘 > 알고리즘문풀' 카테고리의 다른 글
2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어(python) (0) | 2021.07.20 |
---|---|
2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python) (0) | 2021.07.15 |
2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python) (0) | 2021.07.12 |
2019 카카오 코딩테스트 - 블록게임(python) (0) | 2021.07.08 |
2020 카카오 인턴십 - 동굴탐험(python) (0) | 2021.06.29 |