-
매칭 점수코딩 테스트/Level 3 2020. 10. 13. 18:49반응형
매칭 점수
2019 KAKAO BLIND RECRUITMENT
635명 완료https://programmers.co.kr/learn/courses/30/lessons/42893
https://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/
def solution(word, pages): import re data, scores = {}, {} url_re = re.compile(r'<meta property="og:url" content="([^"]*)"/>') text_re = re.compile(f'[^a-z]{word.lower()}(?=[^a-z])') link_re = re.compile(r'<a href="([^"]*)">') for idx, page in enumerate(pages): page = ' '.join(page.lower().split('\n')) url = url_re.search(page).group(1) base_score = len(text_re.findall(page)) links = link_re.findall(page) data[url] = (idx, links, base_score) scores[url] = 0 for url, (idx, links, base_score) in data.items(): scores[url] += base_score if len(links) > 0: link_score = base_score / len(links) for link in links: if link in scores: scores[link] += link_score max_adr, max_score = None, -1 for url, score in scores.items(): if score > max_score: max_score = score max_adr = url return data[max_adr][0]
테스트 1 〉 통과 (4.53ms, 9.96MB) 테스트 2 〉 통과 (4.31ms, 9.95MB) 테스트 3 〉 통과 (3.99ms, 10MB) 테스트 4 〉 통과 (4.39ms, 9.97MB) 테스트 5 〉 통과 (4.60ms, 10.1MB) 테스트 6 〉 통과 (4.39ms, 9.93MB) 테스트 7 〉 통과 (4.40ms, 10.1MB) 테스트 8 〉 통과 (4.39ms, 10.1MB) 테스트 9 〉 통과 (3.81ms, 10.1MB) 테스트 10 〉 통과 (4.28ms, 10.1MB) 테스트 11 〉 통과 (4.36ms, 10.1MB) 테스트 12 〉 통과 (5.65ms, 10.1MB) 테스트 13 〉 통과 (4.10ms, 9.91MB) 테스트 14 〉 통과 (4.15ms, 9.89MB) 테스트 15 〉 통과 (4.24ms, 9.86MB) 테스트 16 〉 통과 (3.81ms, 9.96MB) 테스트 17 〉 통과 (4.21ms, 9.96MB) 테스트 18 〉 통과 (4.16ms, 9.89MB) 테스트 19 〉 통과 (4.19ms, 9.98MB) 테스트 20 〉 통과 (4.10ms, 9.91MB)
로직이야 레벨 1에서도 충분히 풀 수 있는 문제인데..
정규표현식을 전방탐색까지 이용해야 하는 문제입니다.
물론 정규표현식을 안쓰고 풀 수도 있겠지만...
프로그래밍 1~2년 하고 접을 것도 아니고...
익혀두면 써먹을 곳이 많습니다.
워드 프로세서, 에디터에도 지원을 합니다.해설집 보면 정답률이 상당히 낮은데 실수를 찾기 어려워서 그렇습니다.
실제 크롤링은 데이터를 보면서 코딩을 하니 크게 어렵지 않습니다.저도 처음엔 전방 탐색을 하지 않고 코딩했다가 심하게 헤매었습니다.
정규표현식 책은 손에 잡히는 정규표현식 추천합니다. (뒷 광고 아님)
https://book.naver.com/bookdb/book_detail.nhn?bid=6053135반응형