[카카오] 2019 KAKAO BLIND RECRUITMENT 1차 풀이 – 매칭 점수

이 포스팅에서는 2019 카카오 블라인드 채용 1차 문제인 ‘오픈채팅방’ 문제를 해설합니다. 본 풀이에 대한 테스트는 https://programmers.co.kr/learn/courses/30/lessons/42893에서 수행하였으며 공식 풀이와 일치하지 않을 수 있습니다.

공식 풀이는 링크를 참조하시기 바랍니다.


길찾기 게임

출처 : 2019 KAKAO 블라인드 채용 온라인 1차
링크 : https://programmers.co.kr/learn/courses/30/lessons/42893
카테고리 : Graph, DFS, BFS
난이도 : 보통


문제 설명

웹 페이지를 parsing해서 각 페이지의 url과 외부 링크들을 찾아낸다. 페이지의 랭크 점수는 주어진 단어의 출현 빈도인 base 점수에 외부 링크들로부터 얻는 점수를 더한 것이다.

외부 링크로부터 얻는 점수는 (외부 링크 페이지가 갖는 base 점수 / 외부 링크 페이지가 갖는 전체 외부 링크의 갯수)와 같다.


문제 풀이

head내에 있는 meta 태그를 찾아 그 내부에 존재하는 https://를 찾아 page의 url을 얻는다.

<a href=”https://로 시작하는 모든 링크를 찾아 page의 외부 링크를 모두 구한다.

페이지의 모든 알파벳이 아닌 문자들을 스페이스로 치환한 이후에 주어진 단어와 소문자로 변환하여 비교한 것이 같은 것을 카운트해서 base 점수를 구한다.

공식에 따라 base 점수의 내림차순 정렬 및 인덱스의 오름차순 정렬로 정답을 구한다.


정답 코드

# 페이지의 URL
def get_page_url(page):
# 범위가 HEAD 태그 내부
head_start_idx = page.find(“<head>”)
meta_start_idx = head_start_idx
while True:
# 범위가 Meta 태그 내부, head 태그 내부에서 검색
meta_start_idx = page.find(“<meta”, meta_start_idx)
meta_end_idx = page.find(“>”, meta_start_idx)
if meta_start_idx != 1:
# 모든 url은 https://임, meta 태그 시작 위치 이후로 검색
content_idx = page.find(‘https://’, meta_start_idx)
content_end_idx = page.find(‘”‘, content_idx)
# 유효한 인덱스를 찾았고, meta 태그 내부이면
if content_idx != 1 and content_idx < meta_end_idx:
return page[content_idx:content_end_idx]
meta_start_idx = meta_end_idx + 1
else:
return “”
# 외부 링크를 찾는다
def get_external_links(page):
starter = ‘<a href=”https://’
idx = 0
links = []
while True:
idx = page.find(starter, idx)
if idx == 1:
return links
idx += 9
end_idx = page.find(‘”‘, idx)
links.append(page[idx:end_idx])
idx = end_idx + 1
return links
# 주어진 단어를 대소문자 관계없이,
def get_word_score(word, page):
new_page = “”
for i in range(len(page)):
if (ord(page[i]) >= 65 and ord(page[i]) <= 90) or (ord(page[i]) >= 97 and ord(page[i]) <= 122):
new_page += page[i]
else:
new_page += ” “
words = new_page.split()
cnt = 0
for i in range(len(words)):
if word.lower() == words[i].lower():
cnt += 1
return cnt
def solution(word, pages):
page_dic = {}
for i in range(len(pages)):
page = pages[i]
page_url = get_page_url(page)
page_dic[page_url] = [get_word_score(word, page), i]
for i in range(len(pages)):
page = pages[i]
page_url = get_page_url(page)
external_links = get_external_links(page)
word_score = get_word_score(word, page)
for link in external_links:
if link in page_dic and link != page_url:
page_dic[link][0] = (word_score / len(external_links))
result = list(page_dic.values())
result.sort()
return result[0][1]
cs

Competition 카카오 블라인드 채용 매칭 점수

admin

Recent Posts

2025년 10월 12일 일요일 – 서울 생활 176주차

AI AI Agent들이 어느 정도 유용한 건 맞지만, 생각보다 성능이 그렇게 시원찮은지는 모르겠다. 특히나 코드…

2개월 ago

2025년 9월 21일 일요일 – 서울 생활 173주차

중간 점검 시간이 얼마나 빠른지 여름이 훌쩍 지나 3분기는 이제 겨우 한 주가 남아, 올해의…

3개월 ago

2025년 9월 7일 일요일 – 서울 생활 171주차

금주 금주를 시작해보기로 했다. 이미 술을 먹기로 하고 잡은 2개의 회식들은 예외로 하고, 나머지 자리에서는…

3개월 ago

2025년 8월 31일 일요일 – 서울 생활 170주차

티앤미미 예약이 그렇게 힘들다는 티앤미미를 처남네가 운좋게 예약해서 어제 저녁 다녀왔다. 딤섬이 그렇게 맛있다고 하는데,…

3개월 ago

2025년 8월 17일 일요일 – 서울 생활 168주차

아난티 부산 시설과 고객 서비스가 이렇게 극단적으로 다른 방향인 호텔이 있을까 싶다. 시설의 퀄리티는 5성급이라기에…

4개월 ago

2025년 8월 3일 일요일 – 서울 생활 166주차

스트레스 관리 ENTJ 성격 특인지는 몰라도, 나는 계획했던 일에 변수가 생기면 그 순간 큰 스트레스를…

4개월 ago

This website uses cookies.