문제
내 코드
def solution(str1, str2):
temp1, temp2 = '', ''
arr1, arr2 = [], []
# 2개씩 쪼개기
for i in range(len(str1)-1):
if (str1[i:i+2].isalpha()):
arr1.append(str1[i:i+2].lower())
for j in range(len(str2)-1):
if (str2[j:j+2].isalpha()):
arr2.append(str2[j:j+2].lower())
# 교집합 합집합
inter = []
union = arr1 + arr2
for k in arr1:
if (k in arr2):
inter.append(k)
arr2.remove(k)
for m in inter:
union.remove(m)
if (len(union) == 0):
answer = 65536
else:
answer = int((len(inter) / len(union)) * 65536)
return answer
풀이
- str1과 str2를 각각 for문을 돌린다.
a) 2개로 쪼갠 문자열이 알파벳으로 이루어져 있으면, 소문자로 변환해서 arr에 추가한다.
- union에 arr1과 arr2를 더해준다.
- arr1을 for문을 돌린다.
a) arr2 안에 있는 원소면 inter에 추가해주고, arr2에서 해당 원소를 제거한다.
- inter를 for문을 돌린다.
a) 모든 원소를 한번씩 union에서 삭제해준다.
- if문을 넣어서, 분모가 0이면 65536을 반환하고 아니라면 정해진 수식에 따라 계산한 값을 반환한다.
효율적인 코드
피드백
- 두개로 나눠지는게 없는 테스트케이스가 왜 65536으로 반환하게 문제를 만들었는지는 잘 모르겠다. 예외처리 할 생각을 못해서 오랫동안 생각했다.