주어진 문자열을 길이 2로 나누고 다중집합을 허용하여 합집합과 교집합을 구하여 교집합/합집합을 구하는 문제.
def solution(str1, str2): sep_a = [] sep_b = [] for i in range(len(str1)-1) : if str1[i].isalpha() and str1[i+1].isalpha() : sep_a.append(str1[i].lower() + str1[i+1].lower()) for j in range(len(str2)-1) : if str2[j].isalpha() and str2[j+1].isalpha() : sep_b.append(str2[j].lower() + str2[j+1].lower()) copy_a = sep_a.copy() copy_b = sep_b.copy() cnt = 0 for k in sep_a : if k in copy_b : copy_a.remove(k) copy_b.remove(k) cnt += 1 total = len(copy_a) + len(copy_b) + cnt if total == 0 : return 65536 return int(cnt/total*65536)
- 주어진 문자열을 두글자씩 받아서 모두 알파벳인경우 두 문자를 합하여 리스트에 넣어주었다.
- 두개의 리스트를 카피해주었는데, 리스트 그대로를 적용하여 삭제하면 중간에 없어지는 문자로 인해 제대로 삭제가 진행되지 않기 때문이다.
- 이후 합집합을 구하고 연산을 진행하였다.
- 처음엔 리스트 그대로 비교하면서 삭제를 진행하여 교집합을 찾고자 하였다. 삭제방법이 잘못된줄 모르고 시간을 많이 잡아먹었다.
- 리스트를 비교하며 삭제할 때는
copy()
가 필요하다.
- 삭제 방법을 찾았지만, 비교대상이 처음에는
sep_a
와sep_b
였다. 삭제된 녀석은 빼줘야 했던 것이다.
- 위와 비슷한 교훈이 있다.
- 문제 막바지에서 합집합의 개수를 구한는 방법에
cnt
를 빼먹었었다. 너무 기본적인 실수이지만, 집중력이 저하될 때 다시한번 마음을 가다듬고 살펴야 될 것 같다.
- 집중력이 떨어질 때는 잠시 휴식도 좋을것 같다.