티스토리 뷰
Algorithm/Implementation
(Python) - 프로그래머스 (2018 KAKAO BLIND RECRUITMENT) : [1차] 뉴스 클러스터링
하눤석 2022. 1. 19. 10:07728x90
https://programmers.co.kr/learn/courses/30/lessons/17677
- 해설 :
영어, 숫자, 특수문자로 이루어진 문자열 str1과 str2가 주어질 때 이 두 집합의 교집합 크기를 합집합 크기로 나눈 값인 자카드 유사도를 측정하여 이 값에 65535를 곱하여 출력하면 된다. 이 때, 특수문자나 숫자는 모두 삭제하며 2글자씩 끊어서 만든 집합의 자카드 유사도를 측정해야 한다.
- 풀이 :
가장 먼저 두 문자열을 lower()하여 모두 소문자로 변환하였다.
이후 자카드 유사도를 측정하기 위한 집합인 s1과 s2를 만들어 str1과 str2를 각각 변환하여 저장하였다.
이 두 배열의 가장 앞을 가르키는 index인 lc와 rc를 사용하여 투포인터의 원리처럼 서로 같은 값이 나왔을 때, 사전순으로 s1이 앞에 있을 때, 뒤에 있을 때인 총 3가지 경우를 생각하여 lc와 rc를 증가시켜주었다. 또한 결합도를 측정하기 위해 합집합의 수를 측정하기 위한 union 변수와 교집합의 수를 측정하기 위한 inter 변수를 사용하여 상황에 맞게 증가시켜 주었다. 이후 inter값을 union값으로 나누어 출력해주었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
def solution(str1, str2):
answer = 0
str1 = str1.lower()
str2 = str2.lower()
s1 = []
s2 = []
union = 0
inter = 0
for i in range(len(str1)-1):
if str1[i].isalpha() and str1[i+1].isalpha():
s1.append(str1[i]+str1[i+1])
for i in range(len(str2)-1):
if str2[i].isalpha() and str2[i+1].isalpha():
s2.append(str2[i]+str2[i+1])
if not s1 and not s2:
return 65536
else:
s1.sort()
s2.sort()
lc = 0
rc = 0
l1 = len(s1)
l2 = len(s2)
while lc < l1 and rc < l2:
if s1[lc] < s2[rc]:
lc += 1
union += 1
elif s1[lc] == s2[rc]:
lc += 1
rc += 1
union += 1
inter += 1
else:
rc += 1
union += 1
union += (l1-lc)+(l2-rc)
return int((inter/union)*65536)
|
cs |
320x100
'Algorithm > Implementation' 카테고리의 다른 글
(Python) - 프로그래머스 : 튜플 (0) | 2022.01.19 |
---|---|
(Python) - 프로그래머스 : 수식 최대화 (0) | 2022.01.19 |
(Python) - 프로그래머스 (2019 KAKAO BLIND RECRUITMENT) : 실패율 (0) | 2022.01.19 |
(Python) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 괄호 변환 (0) | 2022.01.19 |
(Python) - 프로그래머스(2021 KAKAO BLIND RECRUITMENT) : 메뉴 리뉴얼 (0) | 2022.01.18 |
댓글
© 2022 WonSeok, All rights reserved