Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- image editing
- style align
- 네이버 부스트캠프 ai tech 6기
- score distillation
- 3d generation
- segmentation map
- 코딩테스트
- diffusion
- VirtualTryON
- 3d editing
- segmenation map generation
- video editing
- Python
- controlnext
- diffusion model
- DP
- BOJ
- transformer
- Vit
- 코테
- emerdiff
- diffusion models
- visiontransformer
- 논문리뷰
- video generation
- dreammotion
- Programmers
- controllable video generation
- 프로그래머스
- magdiff
Archives
- Today
- Total
평범한 필기장
[Programmers_Python] 뉴스 클러스터링 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17677
내 풀이방식
- 입력으로 들어오는 문자열을 소문자로 바꾸고 i번째와 i+1번째 문자 둘다 알파벳일 때 리스트에 넣는다.
- 리스트 둘 다 빈 리스트면 65536이 return되게 한다.
- 아니면 공통된 문자열들은 intersection에 넣고, 모든 문자열들을 union에 넣는다
문제점 : 여러번 나오는 문자열들을 intersection에는 적게 나온 횟수만큼, union에는 많이 나온 횟수만큼 넣어야 하는데 어떻게 처리해야할지 몰라서 못풀었다,,,
def solution(str1, str2):
str1 = str1.lower()
str2 = str2.lower()
str1_lst = []
str2_lst = []
for i in range(len(str1) - 1):
if 97<=ord(str1[i])<=122 and 97<=ord(str1[i+1])<=122:
str1_lst.append(str1[i] + str1[i+1])
for i in range(len(str2) - 1):
if 97<=ord(str2[i])<=122 and 97<=ord(str2[i+1])<=122:
str2_lst.append(str2[i] + str2[i+1])
print(str1_lst)
print(str2_lst)
if len(str1_lst) == 0 and len(str2_lst) == 0:
answer = 1
else:
intersection = []
union = []
for k in str1_lst:
if k in str2_lst and k not in intersection:
intersection.append(k)
elif k not in union:
union.append(k)
for k in str2_lst:
if k in str1_lst and k not in intersection:
intersection.append(k)
elif k not in union:
union.append(k)
print(union)
print(intersection)
answer = len(intersection)/len(union)
return answer * 65536
정답 코드
- Counter라는 함수를 통해 리스트내에 어떤 원소가 몇번 나오는지를 나타내는 딕셔너리를 만들 수 있다.
- 아스키코드보다 .isalpha()를 이용하는게 훨씬 간편하다.
from collections import Counter
def solution(str1, str2):
str1 = str1.lower()
str2 = str2.lower()
str1_lst = []
str2_lst = []
for i in range(len(str1)-1):
if str1[i].isalpha() and str1[i+1].isalpha():
str1_lst.append(str1[i:i+2])
for i in range(len(str2)-1):
if str2[i].isalpha() and str2[i+1].isalpha():
str2_lst.append(str2[i:i+2])
str1_cnt = Counter(str1_lst)
str2_cnt = Counter(str2_lst)
union = sum((str1_cnt | str2_cnt).values())
interaction = sum((str1_cnt & str2_cnt).values())
if union == 0 and interaction == 0:
return 65536
else:
return int(65536 * (interaction/union))
코테 문제를 푼 경험이 많지 않아서 Counter라는 함수를 쓰거나 .isalpha()를 쓸 생각을 문제 풀때 생각을 하지 못했다. 코테를 보기 전에 코테 경험을 많이 쌓아야겠다는 생각이 또 드는 문제였던 것 같다,,,
'코딩 테스트 준비 > Programmers' 카테고리의 다른 글
[Programmers_Python] 뒤에 있는 큰 수 찾기 (0) | 2023.04.04 |
---|---|
[Programmers_Python] 2개 이하로 다른 비트 (0) | 2023.04.04 |
[Programmers_Python] 위장 (0) | 2023.03.31 |
[Programmers_Python] 압축 (0) | 2023.03.28 |
[Programmers_Python] 짝지어 제거하기 (0) | 2023.03.27 |