본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트 준비 - 프로그래머스:뉴스 클러스터링 풀이/isalpha() (파이썬)

by 공부가싫다가도좋아 2021. 6. 29.
반응형

프로그래머스:뉴스 클러스터링 풀이


포스팅 요약

1. 프로그래머스 풀이

2. isalpha(),isdigit()에 관한 포스팅 링크


문제풀러가기

https://programmers.co.kr/learn/courses/30/lessons/17677?language=python3 

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr


문제 분석

1. 대문자와 소문자를 같은 취급 하므로, upper() 혹은 lower()을 사용하여 둘다 소문자 혹은 대문자로 바꿔준다.

2. 문자가 아닌것이 포함되어 있으면 버려야 하므로, isalpha()를 사용하여, 문자가 아닌 것이 포함 되어 있다면, 리스트에 추가하지 않는다.

3. 같은 문자열이라면, 65536을 반환하도록 if문을 추가한다.


*두 방법 다 똑같은 방법이지만, 두 번째 코드는 리스트 안에 for문을 돌려 코드를 조금 더 깔끔하게 정리하였다.

코드1 

def solution(str1, str2):
    str1=str1.lower()
    str2=str2.lower()
    result1=[]
    result2=[]
    cnt1=0
    cnt2=0
    
    if str1==str2:
        return 65536
    for i in range(len(str1)-1):
        if str1[i:i+2].isalpha():
            result1.append(str1[i:i+2])
    for i in range(len(str2)-1):
        if str2[i:i+2].isalpha():
            result2.append(str2[i:i+2])
    for i in result1:
        if i in result2:
            result2.remove(i)
            cnt1+=1
    cnt2=len(result1+result2)

    return int((cnt1/cnt2)*65536)

코드2

def solution(str1, str2):
    result1 = [(str1[i:i+2]).lower() for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
    result2 = [(str2[i:i+2]).lower() for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
    cnt1=0
    cnt2=0
    
    if result1==result2:
        return 65536
    for i in result1:
        if i in result2:
            result2.remove(i)
            cnt1+=1
    cnt2=len(result1+result2)

    return int((cnt1/cnt2)*65536)

코드 풀이

  • str1과 str2를 2씩 잘라 만든 문자열을 각각 result1과 result2에 집어 넣는다.
  • isalpha()를 사용하여 문자가 아닌것이 포함되어 있다면 리스트에 추가하지 않도록 한다. 
  • cnt1은 교집합안에 있는 요소의 수, cnt2는 합집합안에 있는 요소의 수.
  • for문과 if문을 통해 result1안에 있는 요소가 result2에도 들어있다면, result2에서 요소를 삭제하며 카운팅 해준다(cnt1+=1).
  • result2에는 result1과 겹치지 않는 요소만 남았으므로 result1+result2를 하면 합집합이 된다.
  • int로 묶어주면 소수점을 버리고 정수로 값을 변환한다.

isalpha(), isdigit()에 대해 알고 싶다면 아래 링크를 참조해주세요.

2021.06.22 - [(Python)파이썬/(Python)파이썬 문법] - (파이썬)알파벳 or 숫자 확인/isdigit(),isalpha() 알아보기 + 예제

 

(파이썬)알파벳 or 숫자 확인/isdigit(),isalpha() 알아보기 + 예제

알파벳인지 숫자인지 확인하기 리스트 안의 요소가 알파벳인지 아닌지, 숫자인지 아닌지 구분하는 법을 알아 보겠습니다. 코드로 설명 a=["1","2","a","3","*"] # 숫자만 출력 for i in a: if i.isdigit(): print

eunhee-programming.tistory.com

 

반응형

댓글