본문 바로가기

분류 전체보기

(185)
[NLP] BM25를 이용한 영화 추천 키워드 기반의 랭킹 알고리즘 BM25 BM25(a.k.a Okapi BM25)는 주어진 쿼리에 대해 문서와의 연관성을 평가하는 랭킹 함수로 사용되는 알고리즘으로, TF-IDF계열의 검색 알고리즘 중 SOTA인 것으로 알려져 있다. 엘라스틱서치에서도 유사도 알고리즘으로 BM25 알고리즘을 채택하였다. BM25 계산 BM25에서 점수를 계산할 때는 아래와 같은 식을 사용하여 계산한다. 키워드 $[q_1, q_2, \ldots, q_n]$을 포함하는 쿼리 $Q$가 주어질 때 문서 $D$에 대한 BM25 점수 계산을 다음과 같다. $$\begin{aligned} \text{score} (D, Q) &= \sum_{i=1}^n \text{IDF}(q_i) * \frac{f(q_i, D)*(k_1 +1)}{f(q_..
[Python] 다트 게임 https://school.programmers.co.kr/learn/courses/30/lessons/17682 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(dartResult): answer = 0 result = [] each_dart = [] for i in dartResult: if each_dart==[]: each_dart.append(i) else: if each_dart[-1].isdigit() and i.isdigit(): each_dart[-1] = each_dart[-1] + i elif not i.isdig..
[Python] k진수에서 소수 개수 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # k진수에서 소수 개수 구하기 import math def solution(n, k): answer = 0 k_num = '' while n > 0: n_rest = n % k k_num += str(n_rest) n = n//k k_num = k_num[::-1] candidate = [word for word in k_num.split('0') if word != '1' and word !=..
[Python] 야근 지수 https://school.programmers.co.kr/learn/courses/30/lessons/12927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 번째 풀이(시간 초과) # 야근 지수 # 효율성 통과 못함... def solution(n, works): answer = 0 for _ in range(n): if sum(works)==0: return 0 works[works.index(max(works))] -= 1 for i in works: if i!=0: answer += i**2 return answer 두 번째 풀이(통과) # ..
[Python] 크기가 작은 부분 문자열 https://school.programmers.co.kr/learn/courses/30/lessons/147355 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 크기가 작은 부분 문자열 def solution(t, p): answer = 0 sub_seq = [] for i in range(len(t)-len(p)+1): sub_seq.append(t[i:i+len(p)]) for j in sub_seq: if j
[Python] 전화번호 목록 https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 번째 풀이 (효율성 3, 4에서만 시간초과) import re def solution(phone_book): phone_book = sorted(phone_book, key=lambda x : len(x)) for i in range(len(phone_book)-1): pattern = re.compile({phone_book[i]}) for j in range(i+1, len(phone_bo..
[Python] 실패율 https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(N, stages): fail_rate_list = [] for i in range(1, N+1): fail_cnt = stages.count(i) challenger = len([x for x in stages if x >= i]) if challenger == 0: fail_rate = 0 else: fail_rate = fail_cnt / challenger fail_..
[Python] 콜라 문제 https://school.programmers.co.kr/learn/courses/30/lessons/132267 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 콜라 문제 def solution(a, b, n): answer = 0 while n >= a: new = n // a *b rest = n % a answer += new n = new + rest return answer