프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/courses/30/lessons/17677
내가 작성한 코드
from collections import Counter
import re
def solution(str1, str2):
s = 0
joint = 0
str1 = str1.lower()
str1 = [str1[i:i+2] for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
str2 = str2.lower()
str2 = [str2[i:i+2] for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
cnt1 = Counter(str1)
cnt2 = Counter(str2)
for k, v in cnt1.items():
if k in cnt2:
joint += min(v, cnt2[k])
s += max(v, cnt2[k])
s += sum(v for k, v in cnt1.items() if k not in cnt2)
s += sum(v for k, v in cnt2.items() if k not in cnt1)
if joint == 0 and s == 0:
joint = 1
s = 1
return int(joint / s * 65536)
- 문자열
- 문자열을 2개씩 자르기
- lower()로 소문자 변형
- isalpha()가 true인 쌍만 확인
- 집합
- 중복값 고려시 Counter 또는 정렬 사용
- Counter에서 key 중복시
- 교집합은 둘 중 min
- 합집합은 둘 중 max - 중복되지 않는 key에 대해 합집합에 값 추가
다른 사람이 작성한 코드
None
기억해야할 것
- isalpha()와 lower()등 문자열에 유용한 메서드
- 중복을 고려한 교집합/합집합시 복잡해짐을 유의
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_BLIND][2021] 매출 하락 최소화 (0) | 2021.09.01 |
---|---|
[프로그래머스][KAKAO_BLIND][2020] 외벽 점검 (0) | 2021.09.01 |
[프로그래머스][KAKAO_BLIND][2018] 추석 트래픽 (0) | 2021.09.01 |
[백준][분할정복] 퍼즐 자르기 (0) | 2021.08.30 |
[백준][그리디] 휴먼 파이프라인 (0) | 2021.08.30 |