◈ 오류 정정 및 피드백 환영
코딩테스트 연습 - 매칭 점수
매칭 점수 프렌즈 대학교 조교였던 제이지는 허드렛일만 시키는 네오 학과장님의 마수에서 벗어나, 카카오에 입사하게 되었다. 평소에 관심있어하던 검색에 마침 결원이 발생하여, 검색개발팀
programmers.co.kr
🔎문제 분석
기본 점수를 계산하기 위해서는 검색어를 단어 단위로 탐색해야 하는데 이는 정규식으로 접근하면 된다.
re.findall(f'[a-zA-Z]+', 'abaa baba')
# ['abaa', 'baba']
re.findall(f'[a-zA-Z]+', 'aba@aba 1aba')
# ['aba', 'aba', 'aba']
구분한 단어와 검색어를 대문자로 통일한 뒤에 서로 일치하는지 비교하면 된다.
base = len(list(filter(lambda x: x.upper()==word.upper(), re.findall(f'[a-zA-Z]+', page))))
외부링크 태그는 a href로 시작하므로 이를 활용해 인덱싱하고 https:// 이후 부분만 파싱한다.
def get_rink(x):
return x.split("https://")[1].split("\"")[0]
href = list(map(lambda x: get_rink(x), page.split('a href')[1:]))
웹페이지의 url 주소는 다음과 같은 특정 양식을 따르기 때문에 마찬가지로 정규식으로 접근하면 된다.
name = re.search('<meta property="og:url" content="(\S+)"\/>', page).group(1)
모든 웹페이지에 대해 위와 같은 방식으로 기본점수와 외부링크 개수를 계산하고 이를 딕셔너리 형태로 저장한다.
그리고 이 딕셔너리를 활용해 매칭점수를 계산하면 된다.
🤦♀️유의 사항
※ 테스트케이스 9번
웹페이지의 url 주소를 찾을 때 다음과 같이 단순하게 태그의 순서 기준으로 찾으면 안 된다.
name = page.split("\n")[3]
※ 테스트케이스 10번
외부링크를 찾을 때 다음과 같이 단순하게 href로만 찾으면 안 된다.
href = list(map(lambda x: get_rink(x), page.split('href')[1:]))
import re
def get_rink(x):
return x.split("https://")[1].split("\"")[0]
def solution(word, pages):
dic = {}
for page in pages:
base = len(list(filter(lambda x: x.upper()==word.upper(), re.findall(f'[a-zA-Z]+', page))))
href = list(map(lambda x: get_rink(x), page.split('a href')[1:]))
name = re.search('<meta property="og:url" content="(\S+)"\/>', page).group(1)
dic[get_rink(name)] = [base, href]
mx = answer = 0
for idx, page in enumerate(dic.keys()):
link = 0
for v in dic.values():
if page in v[1]:
link += v[0]/len(v[1])
match = link+dic[page][0]
if match > mx:
mx = match
answer = idx
return answer
'Algorithm > Python' 카테고리의 다른 글
[Python] 프로그래머스 - [1차] 다트게임(Dictionary) (0) | 2022.03.18 |
---|---|
[Python] 프로그래머스 - [3차] 파일명 정렬(정규식) (0) | 2022.03.17 |
[Python] 프로그래머스 - [3차] n진수 게임(재귀) (0) | 2022.03.15 |
[Python] 프로그래머스 - [1차] 셔틀버스 (0) | 2022.03.14 |
[Python] 프로그래머스 - [3차] 압축 (0) | 2022.03.13 |
댓글