developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성코테파이썬풀이
  • 카카오코테java풀이
  • 통계분석
  • 삼성코테자바풀이
  • 삼성코테기출
  • SW역량테스트파이썬풀이
  • 데이터분석
  • c++디자인패턴
  • c++ 빌더 패턴
  • AR모형
  • MA모형
  • 삼성코테기출자바풀이
  • BOJ파이썬풀이
  • Arima
  • 삼성코테구현문제추천
  • 삼성코테준비
  • ARIMA모형
  • 운영체제인터럽트
  • 백준파이썬풀이
  • 코테파이썬
  • 통계학
  • 삼성코테파이썬준비
  • 삼성코테자바준비
  • 삼성코테자바꿀팁
  • 삼성코테구현풀이
  • 시계열분석
  • 삼성코테파이썬
  • SW역량테스트파이썬
  • 시계열
  • 카카오코테

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

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

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

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

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
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • 2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python)
    • 2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python)
    • 2019 카카오 코딩테스트 - 블록게임(python)
    • 2020 카카오 인턴십 - 동굴탐험(python)
    developer-ellen
    developer-ellen

    티스토리툴바