반응형
프로그래머스:뉴스 클러스터링 풀이
포스팅 요약
1. 프로그래머스 풀이
2. isalpha(),isdigit()에 관한 포스팅 링크
문제풀러가기
https://programmers.co.kr/learn/courses/30/lessons/17677?language=python3
문제 분석
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() 알아보기 + 예제
반응형
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
코딩테스트 준비 - 프로그래머스: 괄호 변환 풀이/재귀함수 문제 (파이썬) (2) | 2021.07.01 |
---|---|
코딩테스트 준비 - 프로그래머스: 행렬 테두리 회전하기 풀이(파이썬) (2) | 2021.06.30 |
코딩테스트 준비 - 가장 큰 수: 풀이/2개의 방법 (파이썬) (0) | 2021.06.28 |
코딩테스트 준비 - 프로그래머스: 게임 맵 최단거리 풀이/BFS (파이썬) (4) | 2021.06.28 |
코딩테스트 준비 - 프로그래머스: 소수찾기Lv2 풀이/permutations에 대하여 (파이썬) (0) | 2021.06.27 |
댓글