코딩테스트

[프로그래머스][KAKAO_BLIND][2019] 매칭 점수

pythaac 2021. 9. 2. 21:13
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

https://programmers.co.kr/learn/courses/30/lessons/42893

 

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

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

programmers.co.kr

 

내가 작성한 코드

# 거듭된 실패로 그냥 날려버렸다...
None
  • 아무래도 html 문서가 길고 태그들이 복잡하게 얽혀서 특정 문장을 파싱해내는데에 문제가 있었던 것 같다

 

다른 사람이 작성한 코드

import re
def solution(word, pages):
    answer = 0
    meta_parser = re.compile('<meta(.+?)/>')
    a_parser = re.compile('<a(.+?)>')
    page_infos = []
    for page in pages:
        page_dict = dict()
        a_tags = a_parser.findall(page)
        outer_url = []
        for a_tag in a_tags:
            first_idx = end_idx = -1
            for idx, char in enumerate(a_tag):
                if char == '"':
                    if first_idx == -1:
                        first_idx = idx
                    elif end_idx == -1:
                        end_idx = idx
            outer_url.append(a_tag[first_idx+1:end_idx])
        meta_tag = meta_parser.search(page).group()
        content_prop = meta_tag.split(' ')[2]
        first_idx = end_idx = -1
        for idx, char in enumerate(content_prop):
            if char == '"':
                if first_idx == -1:
                    first_idx = idx
                elif end_idx == -1:
                    end_idx = idx
        url = content_prop[first_idx+1: end_idx]
        page_dict['outer_url_list'] = outer_url
        page_dict['url'] = url
        page_dict['keyword_point'] = re.sub('[^a-z]+', '.', page.lower()).split('.').count(word.lower())
        page_dict['link_point'] = 0
        page_infos.append(page_dict)
    for page_info in page_infos:
        for outer_url in page_info['outer_url_list']:
            for outer_url_page_candidate in page_infos:
                if outer_url == outer_url_page_candidate['url']:
                    outer_url_page_candidate['link_point'] += page_info['keyword_point']/len(page_info['outer_url_list'])
    point_lst = [page_info['keyword_point'] + page_info['link_point'] for page_info in page_infos]
    print(point_lst)
    return point_lst.index(max(point_lst))
  • 다른 분의 코드인데, for문이 많은 것을 보니 내가 regex에 사용한 패턴이 약했나 싶었다

https://geonlee.tistory.com/84

 

[프로그래머스] 🔍 매칭 점수 - 2019 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT

[프로그래머스] 🔍 매칭 점수 - 2019 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT 문제 설명 프렌즈 대학교 조교였던 제이지는 허드렛일만 시키는 네오 학과장님의 마수에서 벗어나, 카카오

geonlee.tistory.com

 

기억해야할 것

  • 나중에 다시 풀어보려고 다른 분의 코드를 제대로 읽진 않았다
    • 얼추 보았을 때 regex 패턴이 명확하지 못했다는 생각이 든다
  • 시간을 너무 쓰지 말자 싶어서 넘어가지면, 빨리 다시 풀어보고 싶다