Problem Solving/Programmers
[Programmers] 2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링
이진2
2021. 2. 12. 22:14
programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
문자열에 등장하는 알파벳으로만 이루어진 부분 문자열들을 추출해내고, 해당 알파벳들을 집합으로 만들어 교집합을 구하는 문제이다.
문제에 등장하는 자카드 유사도는 교집합의 크기 / 합집합의 크기로 정의되는데, 합집합은 각각의 집합의 크기와 교집합으로 다시 정의할 수 있으므로 교집합만 구해주면 된다
처음에는 set 자료형을 쓸까 하다가 중복 원소를 포함할 수 있다고 해서, list로 관리해주며 공통된 원소가 등장할 경우 삭제하는 방식으로 구현했는데
for문 중간에 remove를 하면 끝까지 반복하지 않아서(삭제한 만큼 덜 반복해서) 그냥 boolean, int 이차원 list로 관리해주고 사용 여부를 체크해주었다
def solution(str1, str2):
answer = 0
u=[]
v=[]
for i in range(0,len(str1)-1):
st=str1[i:i+2]
if st.isalpha():
u.append([st.lower(),True])
for i in range(0,len(str2)-1):
st=str2[i:i+2]
if st.isalpha():
v.append([st.lower(),True])
answer=len(u)+len(v)
inter=0
for i in u:
for j in v:
if i==j:
i[1]=False
j[1]=False
inter+=1
if answer==inter: return 65536
answer=int((inter/(answer-inter))*65536)
return answer