2020 KAKAO BLIND RECRUITMENT
https://school.programmers.co.kr/learn/courses/30/lessons/17677
머리말
풀이 시간 40분
다중집합의 교집합과 차집합을 어떻게 구할지 몰라 검색해서 알아보았다.
그런데 문제를 다시 보니 해당 부분 어떻게 처리할지 알려줬더라 ㅎㅎ;;
다른 풀이 방법을 보니 엄청 깔끔하니 이것도 참고해보자.
접근 방법
문제의 요구사항을 차근차근 적용하여 풀었다.
다중집합의 합집합과 교집합을 구하는 방법은 [더 알아보기]를 참조하길 바란다.
🐥 이건 얻어가자
str.upper()
: 문자열을 모두 대문자로 변경str.isalpha()
: 문자열이 알파벳인지 확인
코드
def solution(str1, str2):
answer = 0
set1 = makeSet(str1)
set2 = makeSet(str2)
# 다중집합의 합집합 구하기
temp = set1.copy()
unionSet = set1.copy()
for i in set2:
if i not in temp:
unionSet.append(i)
else:
temp.remove(i)
# 다중집합의 교집합 구하기
temp = set1.copy()
intersecSet = []
for i in set2:
if i in temp:
temp.remove(i)
intersecSet.append(i)
if len(set1) == 0 and len(set2) == 0: return 65536
answer = int(len(intersecSet) / len(unionSet) * 65536)
return answer
def makeSet(str):
setList = []
str = str.upper()
i = 0
while i + 1 < len(str):
comb = str[i] + str[i+1]
if comb.isalpha():
setList.append(comb)
i += 1
return setList
다른 풀이
def solution(str1, str2):
list1 = [str1[n:n+2].lower() for n in range(len(str1)-1) if str1[n:n+2].isalpha()]
list2 = [str2[n:n+2].lower() for n in range(len(str2)-1) if str2[n:n+2].isalpha()]
tlist = set(list1) | set(list2)
res1 = [] #합집합
res2 = [] #교집합
if tlist:
for i in tlist:
res1.extend([i]*max(list1.count(i), list2.count(i)))
res2.extend([i]*min(list1.count(i), list2.count(i)))
answer = int(len(res2)/len(res1)*65536)
return answer
else:
return 65536
더 읽을거리
'Algorithm' 카테고리의 다른 글
[Python] 백준 16500 : 문자열 판별 (dp) (0) | 2022.07.19 |
---|---|
[Python] 백준 12865 : 평범한 배낭 (0/1 knapsack problem) (0) | 2022.07.09 |
[Python] 프로그래머스 : 괄호 변환 (0) | 2022.07.07 |
[Python] 프로그래머스 : 메뉴 리뉴얼 (구현) (0) | 2022.07.05 |
[Python] 프로그래머스 : 신규 아이디 추천 (구현) (1) | 2022.05.22 |