https://programmers.co.kr/learn/courses/30/lessons/42893
문제는 카카오에서 출제 했던 매칭점수이다. 난이도는 3이다.
이 문제는 어떻게 url을 받아올지가 가장 중요하다.
나의 방법은 띄어쓰기를 기준으로 split으로 나누고 head, body 두개로 나누어서
head에서는 나의 url을 찾고 body에서는 링크되어있는 url과 내용을 찾는다.
이 url을 찾았던 것을 바탕으로 점수를 계산하면 된다.
그리고 basis_score을 구할 때 소문자, 대문자를 통일해 줘야 하기 때문에 lower() 함수를 썼다.
이유는 모르겠지만 실패했다. index, 정답오류가 발생했다.ㅜㅜ
def solution(word, pages):
word = word.lower()
url = [] # 자신의 url이 들어갈 리스트
page = [] # 각 페이지에 split된 값들이 들어갈 list
basis_score = [0] * len(pages)
out_link_index = [[] for _ in range(len(pages))] # 링크점수를 매기기 위한 link_index
matching_score = [] # 매칭점수
link_score = [0] * len(pages)
for i in range(len(pages)):
# 띄어쓰기로 분할하기
page.append(list(pages[i].split('\n')))
# 현재 페이지 나타내기
now_page = page[i]
# 시간 단축을 위해서 head 와 body부분을 나누는데 head부분
head = now_page[now_page.index('<head>') + 1: now_page.index('</head> ')]
# 자신의 url을 찾고 url에 append
for j in range(len(head)):
if '<meta property="og:url" content="' in head[j]:
now_url = head[j]
now_url = now_url[now_url.index('<meta property="og:url" content="'):]
now_url = now_url[now_url.index('https'):]
now_url = now_url[:now_url.index('"')]
url.append(now_url)
break
for i in range(len(pages)):
now_page = page[i]
# body부분
body = now_page[now_page.index('<body>') + 1: now_page.index('</body>')]
score = 0
for j in range(len(body)):
# 소문자로 다 바꾸기
now_text = body[j].lower()
# link 찾기
if '<a href=' in now_text:
out_link = now_text[now_text.index('<a href="') + 9:now_text.index('">')]
# link의 index 찾기
if out_link in url:
out_link_index[i].append(url.index(out_link))
else:
out_link_index[i].append(-1)
# link의 나머지 부분도 body의 글이 될수 있음
# 이건 a tage의 앞부분
find_word = ''
for w in now_text[:now_text.index('<a href="')]:
if w.isalpha():
find_word += w
else:
if find_word == word:
score += 1
find_word = ''
if find_word == word:
score += 1
# 이건 a tage의 뒷부분
find_word = ''
for w in now_text[now_text.index('</a>') + 4:]:
if w.isalpha():
find_word += w
else:
if find_word == word:
score += 1
find_word = ''
if find_word == word:
score += 1
# 여기는 그 이외의 부분에서 word 찾기
else:
find_word = ''
for w in now_text:
if w.isalpha():
find_word += w
else:
if find_word == word:
score += 1
find_word = ''
if find_word == word:
score += 1
basis_score[i] += score
# link_score 계산하기
for i in range(len(out_link_index)):
score = basis_score[i] / len(out_link_index[i])
for j in range(len(out_link_index[i])):
if out_link_index[i][j] != -1:
link_score[out_link_index[i][j]] += score
# match_score 계산하기
for i in range(len(out_link_index)):
matching_score.append(basis_score[i] + link_score[i])
max_index = matching_score.index(max(matching_score))
return max_index
'알고리즘 > 알고리즘 공부(python)' 카테고리의 다른 글
BAEKJOON 19238 스타트 택시 Using Python (0) | 2022.06.16 |
---|---|
백준(BAEKJOON) 1654 랜선 자르기 using Python (0) | 2022.06.16 |
프로그래머스 (보석 쇼핑) using python (0) | 2022.06.15 |
프로그래머스( 신규 아이디 추천 ) using python (0) | 2022.06.15 |
프로그래머스_쿼드압축 후 개수 세기(성공) (0) | 2022.05.03 |