from curses.ascii import isalpha
# str1 = "FRANCE"
# str2 = "french"
# 16384
str1 = "handshake"
str2 = "shake hands"
# 65536
# str1 = "aa1+aa2"
# str2 = "AAAA12"
# 43690
# str1 = "E=M*C^2"
# str2 = "e=m*c^2"
# 65536
def solution(str1, str2):
answer = 0
A = []
B = []
for i in range(len(str1)-1):
if isalpha(str1[i]) and isalpha(str1[i+1]):
x = str1[i].upper() + str1[i+1].upper()
A.append(x)
for i in range(len(str2)-1):
if isalpha(str2[i]) and isalpha(str2[i+1]):
x = str2[i].upper() + str2[i+1].upper()
B.append(x)
# A = ['FR', 'RA', 'AN', 'NC', 'CE']
# B = ['FR', 'RE', 'EN', 'NC', 'CH']
# 교집합은 {FR, NC},
# 합집합은 {FR, RA, AN, NC, CE, RE, EN, CH}
print("A = ", A)
print("B = ", B)
C = []
for a in A:
if a in B:
A.remove(a)
B.remove(a)
C.append(a)
print("1. A = ", A)
print("1. B = ", B)
print("1. C = ", C)
num1 = len(A)
num2 = len(C)
num3 = len(B)
answer = int(num2 / (num1+num2+num3) * 65536)
return answer
print(solution(str1, str2))
A = ["11", "11", "12"]
B = ["11", "13"]
위의 예시로 교집합을 구하는 과정에서 A의 11이라는 원소가 B에도 있어서 교집합을 구할 수 있을까 싶지만 A에 11이 2개 있을 땐 예외가 발생
from curses.ascii import isalpha
from math import floor
def solution(str1, str2):
answer = 0
A = []
B = []
for i in range(len(str1)-1):
if isalpha(str1[i]) and isalpha(str1[i+1]):
x = str1[i].upper() + str1[i+1].upper()
A.append(x)
for i in range(len(str2)-1):
if isalpha(str2[i]) and isalpha(str2[i+1]):
x = str2[i].upper() + str2[i+1].upper()
B.append(x)
if len(A) == 0 and len(B) == 0:
return 65536
Adict = dict()
Bdict = dict()
for a in A:
if a not in Adict.keys():
Adict[a] = 1
else:
Adict[a] += 1
for b in B:
if b not in Bdict.keys():
Bdict[b] = 1
else:
Bdict[b] += 1
# print("Adict = ", Adict)
# print("Bdict = ", Bdict)
num1 = 0
num2 = 0
for a in Adict.keys():
if a in Bdict.keys():
num1 += min(Adict[a], Bdict[a])
for a in Adict.keys():
if a in Bdict.keys():
num2 += max(Adict[a], Bdict[a])
Bdict[a] = 0
else:
num2 += Adict[a]
for b in Bdict.keys():
num2 += Bdict[b]
answer = floor(num1 / num2 * 65536)
return answer
5번 테스트 케이스가 계속 틀렸다 나왔다.
if len(A) == 0 or len(B) == 0:
위의 코드를
if len(A) == 0 and len(B) == 0:
으로 바꿔줘서 해결했다.
5번 케이스는 교집합은 없지만 합집합이 있는 경우였다. and 를 or로 바꿔줘서 해결.