알고리즘/알고리즘문풀

2019 카카오 코딩테스트 - 매칭점수(python)

developer-ellen 2021. 7. 5. 09:16

❓ 문제 - 2019 카카오 코딩테스트 매칭점수 문제 - python 풀이법

출처 

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

 

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

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

programmers.co.kr

 

 

📝 문제해결법 

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://velog.io/@ckstn0778/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42893%EB%B2%88-%EB%A7%A4%EC%B9%AD-%EC%A0%90%EC%88%98-X-1-Python)

 

- (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문서에서 어떻게 사용할 수 있는지 배워볼 수 있었다. 따로 정규표현식들을 공부하고 정리해야겠다.😂

댓글수0