프로그래머스 - [1차] 뉴스 클러스터링

박상진·2022년 2월 3일
0

프로그래머스

목록 보기
50/65
post-thumbnail

자세한 내용은 링크 참고

문제 개요

주어진 문자열을 길이 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)
  1. 주어진 문자열을 두글자씩 받아서 모두 알파벳인경우 두 문자를 합하여 리스트에 넣어주었다.
  2. 두개의 리스트를 카피해주었는데, 리스트 그대로를 적용하여 삭제하면 중간에 없어지는 문자로 인해 제대로 삭제가 진행되지 않기 때문이다.
  3. 이후 합집합을 구하고 연산을 진행하였다.

배운점

  1. 처음엔 리스트 그대로 비교하면서 삭제를 진행하여 교집합을 찾고자 하였다. 삭제방법이 잘못된줄 모르고 시간을 많이 잡아먹었다.
  • 리스트를 비교하며 삭제할 때는 copy()가 필요하다.
  1. 삭제 방법을 찾았지만, 비교대상이 처음에는 sep_asep_b였다. 삭제된 녀석은 빼줘야 했던 것이다.
  • 위와 비슷한 교훈이 있다.
  1. 문제 막바지에서 합집합의 개수를 구한는 방법에 cnt를 빼먹었었다. 너무 기본적인 실수이지만, 집중력이 저하될 때 다시한번 마음을 가다듬고 살펴야 될 것 같다.
  • 집중력이 떨어질 때는 잠시 휴식도 좋을것 같다.
profile
개발자가 되고싶당

0개의 댓글