프로그래머스 | 2018 KAKAO BLIND RECRUITMENT | [1차] 뉴스 클러스터링 [파이썬 python]

2023. 6. 21. 18:11·Algorithm/프로그래머스
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 시도한 코드

def solution(str1, str2):
    str1 = str1.upper()
    str2 = str2.upper()
    
    # 다중집합 구하기
    A, B = [], []
    for i in range(len(str1)-1):
        str = str1[i:i+2] # 두글자씩 끊어
        if str.isalpha(): # 영문자로 된 글자만 다중집합의 원소로 만듦
            A.append(str)
    for i in range(len(str2)-1):
        str = str2[i:i+2] # 두글자씩 끊어
        if str.isalpha(): # 영문자로 된 글자만 다중집합의 원소로 만듦
            B.append(str)
    
    # 자카드 유사도 구하기
    if len(A) == 0 and len(B) == 0:
        j = 1
    else:
        inter, union = 0, 0 # 교집합, 합집합
        for a in A:
            if a in B: # A와 B 공통 원소
                inter += 1 
            else: # A에만 있는 원소
                union += 1 
        union += len(B) # 합집합 = A에만 있는 원소 + B 
        j = inter/union # 자카드 유사도 = 교집합/합집합
        
    return (int(j * 65536))

위 코드를 제출하면 5개의 테스트 케이스에서 실패한다.

일반적으로 A, B 두 집합의 합집합은 A에만 존재하는 원소 + B로 구할 수 있다.

하지만 다중합집합은 일반적인 합집합과 교집합을 구하는 방식과 다르기 때문에 이 코드를 제출하면 실패하는 것이다.

 

정답 코드

def solution(str1, str2):
    str1 = str1.upper()
    str2 = str2.upper()
    
    # 다중집합 구하기
    A, B = [], [] 
    for i in range(len(str1)-1):
        str = str1[i:i+2] # 두글자씩 끊어
        if str.isalpha(): # 영문자로 된 글자만 다중집합의 원소로 만듦
            A.append(str)
    for i in range(len(str2)-1):
        str = str2[i:i+2] # 두글자씩 끊어
        if str.isalpha(): # 영문자로 된 글자만 다중집합의 원소로 만듦
            B.append(str)
            
    # 자카드 유사도 구하기
    if len(A) == 0 and len(B) == 0:
        j = 1
    else:
        # 다중합집합
        a_temp = A.copy()
        a_result = A.copy()
        for i in B:
            if i not in a_temp: # B에만 존재하면 합집합에 추가
                a_result.append(i) 
            else: # 공통으로 존재하면 중복되므로 제거
                a_temp.remove(i)
        # 다중교집합
        result = []
        for i in B:
            if i in A:
                A.remove(i)
                result.append(i)

        j = len(result)/len(a_result) # 자카드 유사도 = 교집합/합집합
        
    return (int(j * 65536))

위 코드와 같이 다중합집합과 다중교집합을 구하는 부분을 수정해 주면 된다.

다중합집합과 다중교집합을 구하는 방법은 아래 블로그에 자세하게 설명되어 있다.

 

[개념정리] 파이썬 다중 집합의 교집합, 합집합

코테 연습할때마다 잊을만 하면 나오는 다중집합이다. 굳이 몰라도 되지만, 모른채 쓰려면 머지소트를 구현해야 하는 굉장한 번거로움이 있기때문에 알아두는게 좋을 것 같아서 포스팅 한다. 1.

velog.io

반응형
저작자표시
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 2022 KAKAO BLIND RECRUITMENT | 주차 요금 계산 [파이썬 python]
  • 프로그래머스 | 2019 KAKAO BLIND RECRUITMENT | 오픈채팅방 [파이썬 python]
  • 프로그래머스 | 프로세스 [파이썬 python]
  • 프로그래머스 | 행렬의 곱셈 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 2018 KAKAO BLIND RECRUITMENT | [1차] 뉴스 클러스터링 [파이썬 python]

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.