코딩문제풀이/파이썬

[프로그래머스] 뉴스 클러스터링(파이썬)

오늘밤공부 2023. 2. 21. 13:53
반응형

🗓️ 문제 설명

  • 자카드 유사도는 집합 간의 유사도를 검사하는 방법 중의 하나로 두 집합이 주어지면 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의됩니다. 
  • 입력으로 들어온 문자열은 두 글자씩 끊어서 다중집합의 원소로 만듭니다.
  • 다중집합의 원소는 영문자로 된 글자 쌍만 유효하고, 기타 공백이나 숫자, 특수 문자가 들어있는 경우는 그 글자 쌍을 버립니다. 
  • 입력으로 들어온 두 문자열의 자카드 유사도를 출력합니다.
    유사도 값은 0에서 1사이의 실수이므로, 이를 다루기 쉽도록 65536을 곱한 후에 소수점 아래를 버리고 정부만 출력합니다.
  • 제한 사항
    • 2 ≤ str1, str2 길이 ≤ 1000
    • 다중집합 원소 사이를 비교할 때, 대문자와 소문자의 차이는 무시합니다. 
  • 입출력 예시
str1 str2 answer
FRANCE french 16384
handshake shake hands 65536
aa1+aa2 AAAA12 43690
E=M*C^2 e=m*c^2 65536

 

💻 코드

최종 코드

 - 수정 사항 
 >> 차집합 구하는 과정 수정

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

- set를 이용한 합집합과 교집합을 구해 원소들의 최소 최대를 통해 자카드 유사도를 구함

풀이 2번

- isalpha()를 이용한 문자열 추출

 

⚙️ 시행착오

1차 시도

더보기

- 정규표현식을 이용해 다중집합을 만드는 과정에서 영문자 외의 문자가 포함

 

2차 시도

더보기

- 수정 사항
 >> 정규표현식에서 두 글자의 영문자만 포함하도록 코드 수정
- 영문자만 포함한 다중집합을 만드는 과정은 성공적으로 진행 
- 합집합과 교집합에 빈리스트가 들어가는 경우가 발생해 자카드 유사도를 구하는 과정에서 zerodivisionerror 발생

 

3차 시도

더보기

- 수정 사항
 >> 다중 합집합이 빈 리스트인지 아닌지를 파악하는 조건문 추가
 >> 합집합을 만드는 과정을 수정(리스트를 더하기→ 반복문을 통한 합집합 생성)
- 테스트 실패나 발생하는 문제가 존재

 

알게된 점

더보기

다중 합집합을 구하는 반복문

 다중 교집합을 구하는 반복문

 

반응형