로직
1. one, two를 대문자로 통일한 후, 합집합, 교집합을 구한다.
** 문제점 : union, interaction은 set일 때 사용가능
- set하게 되면 만약, one = ['AA', 'AA'], two = ['AA', 'AA', 'AA']라면 set_one = set_two = {'AA'}로 동일해진다
** 해결책 :
1) Counter함수 사용해서 union, interaction를 사용한다.
2) make_interaction함수를 만들어 교집합만 구하면 one, two, interaction(one, two)갯수로 합집합을 구한다.
나는 2)을 택했다.
코드
def solution(str1, str2):
def make_split(word):
answer = []
for i in range(len(word) - 1):
w = word[i:i + 2]
if w.isalpha():
answer.append(w)
return answer
def make_intersection(one, two):
answer = []
for i in range(len(one)):
for j in range(len(two)):
if one[i] == two[j]:
answer.append(one[i])
del two[j]
break
return answer
str1 = str1.upper()
str2 = str2.upper()
one = make_split(str1)
two = make_split(str2)
len_one = len(one)
len_two = len(two)
if len_one == 0 and len_two == 0:
return 65536
elif one == two:
return 65536
else:
part = make_intersection(one, two)
total = len_one + len_two - len(part)
result = len(part) / total * 65536
return int(result)
주의할 점
1. 무조건 set의 union, intersection 함수를 쓰려고 하지 말자.
2. del을 사용하려면 index로만 지울 수 있다(문자로는 불가) -> for문을 one, two 둘다 돌려야한다.
'알고리즘' 카테고리의 다른 글
[programmers] 파일명 정렬 (0) | 2020.09.02 |
---|---|
[programmers] 오픈채팅방 (0) | 2020.09.01 |
[programmers] 튜플 (0) | 2020.08.31 |
[programmers] 다트 게임 (0) | 2020.08.31 |
[baekjoon] 14888. 연산자 끼워넣기 (0) | 2020.08.19 |