📖 문제
https://programmers.co.kr/learn/courses/30/lessons/17677
💻 코드
from collections import defaultdict
def parse_and_store(_str):
_set = set()
_dic = defaultdict(int)
for i in range(len(_str) - 1):
s = _str[i:i + 2]
if s.isalpha():
_set.add(s.lower())
_dic[s.lower()] += 1
return _set, _dic
def solution(str1, str2):
set1, dic1 = parse_and_store(str1)
set2, dic2 = parse_and_store(str2)
if len(set1) == len(set2) == 0:
jac = 1
else:
jac = sum(min(dic1[s], dic2[s]) for s in (set1 & set2)) / sum(max(dic1[s], dic2[s]) for s in (set1 | set2))
return int(jac * 65536)
🙌 한마디
구현(Implementation) 유형이었고, 두 집합의 교집합과 합집합을 구함과 동시에 중복되는 원소들의 개수를 고려해야했다. 교집합과 합집합을 구하는데 set을 이용했고, 중복되는 원소들은 dictionary에 저장했다. 소수점 버림은 int()를 사용했다. math.trunc()와 int()는 둘 다 소수점을 버리며, 동일하게 동작한다. math.floor은 소수점을 반올림하므로 음수에서 math.trunc,int()와 다르게 동작한다. 이 점에 유의하자. 그럼에도 해당 문제는 math.floor, math.trunc(=int()) 모두 통과가 된다.
'Problem Solving > 📕Programmers' 카테고리의 다른 글
[Programmers] n진수 게임 (Python) (0) | 2021.10.08 |
---|---|
[Programmers] 캐시 (Python) (0) | 2021.10.07 |
[Programmers] 파일명 정렬 (Python) (0) | 2021.10.05 |
[Programmers] 프렌즈4블록 (Python) (0) | 2021.10.04 |
[Programmers] 방금그곡 (Python) (0) | 2021.10.03 |