문제
https://programmers.co.kr/learn/courses/30/lessons/17677
처음 작성한 코드
def solution(str1, str2):
import re
list1 = [(str1[i:i+2]).lower() for i in range(len(str1)-1) if re.match('[a-zA-Z]{2}',str1[i:i+2])]
list2 = [(str2[i:i+2]).lower() for i in range(len(str2)-1) if re.match('[a-zA-Z]{2}',str2[i:i+2])]
gyo = 0
if not list1 and not list2: return 65536
for i in list1:
if i in list2:
gyo+=1
list2[list2.index(i)] = '$$$'
hap = len(list1+list2)-gyo
return int((gyo/hap)*65536)
코드 리뷰 후
def solution(str1,str2):
import re
list1 = [(str1[i:i+2]).lower() for i in range(len(str1)-1) if re.match('[a-zA-Z]{2}',str1[i:i+2])]
list2 = [(str2[i:i+2]).lower() for i in range(len(str2)-1) if re.match('[a-zA-Z]{2}',str2[i:i+2])]
if not list1 and not list2: return 65536
gyo = set(list1) & set(list2)
hap = set(list1) | set(list2)
_gyo = sum([min(list1.count(g), list2.count(g)) for g in gyo])
_hap = sum([max(list1.count(h), list2.count(h)) for h in hap])
return int(_gyo/_hap*65536)
깨달은 점
- 정규식 좋다
- 다중집합은 원소의 중복을 허용한다.. 그래서 set()을 사용하지 않고 코딩을 했는데 다른 사람들이 푼 방법을 보니까 기가막힌다! 진짜 어떻게 저런 생각을 하지..
'Programmers' 카테고리의 다른 글
[프로그래머스] 실패율 (0) | 2021.01.13 |
---|---|
[프로그래머스] 튜플 (0) | 2021.01.11 |
[프로그래머스] H-Index (0) | 2021.01.09 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.01.07 |
[프로그래머스] 네트워크 (0) | 2021.01.06 |