코딩테스트 연습 - [1차] 뉴스 클러스터링 | 프로그래머스 스쿨 (programmers.co.kr)
*의사코드
1. 소문자로
2. 2칸씩검사하면서
알파벳이아니면 컨틴뉴
아니면 append
3. dict에 key,원소갯수 저장
※ m['a'] 바로접근시 에러
해결 : if 문자 not in m -> 할당 m[문자]=1
else: m[문자]+=1
4. 맵순회하면서 ( for key in m)
ex) s1 : 'fr' : 3
s2 : 'fr',5
이면
합집합==최대값
교집합==최소값이됨
4.1 중복키가 존재하는경우 -> 최대값,최소값
아닌경우로 분할 -> 합집합+ 원소갯수, 교집합은 pass
def solution(str1, str2):
answer = 0
s1=[]
s2=[]
#s1.add(1)
##############################
#all 소문자로
str1=str1.lower()
#print(str1)
str2=str2.lower()
##############################
#두문자씩 끊기
#특수문자가잇는경우 continue
for i in range(len(str1)-1):
#print(0+i," ",2+i)
if not str1[0+i:2+i].isalpha():
continue
s1.append(str1[0+i:2+i])
#s1.add(str1[0+i:2+i])
for i in range(len(str2)-1):
if not str2[0+i:2+i].isalpha():
continue
#print(0+i," ",2+i)
#s2.add(str2[0+i:2+i])
s2.append(str2[0+i:2+i])
##################################
#합집합의 원소갯수구하기
#s1의 1의갯수 : 3개
#s2의 1의갯수 : 5개 -> 합집합의 1의갯수는5개]
#{'fr': 1, 'ra': 1, 'an': 1, 'nc': 1, 'ce': 1} 이런식으로저장하기
합집합원소수=0
맵1=dict()
맵2=dict()
for s in s1:
if s not in 맵1:
맵1[s]=1
else:
맵1[s]+=1
for s in s2:
if s not in 맵2:
맵2[s]=1
else:
맵2[s]+=1
print(맵1, 맵2)
#합집합수구하기
for key in 맵1:
#맵2에도 존재하는경우
if key in 맵2:
합집합원소수+=max(맵2[key],맵1[key])
else:
합집합원소수+=맵1[key]
for key in 맵2:
#맵2에도 존재하는경우
if key in 맵1:
pass #위랑중복
else:
합집합원소수+=맵2[key]
print(합집합원소수)
#교집합수구하기
교집합원소수=0
for key in 맵1:
#맵2에도 존재하는경우
if key in 맵2:
교집합원소수+=min(맵2[key],맵1[key])
else:
pass
for key in 맵2:
#맵1에도 존재하는경우
if key in 맵1:
pass
else:
pass
print(교집합원소수)
#s1=set([1,2,3,1])
print(s1)
print(s2)
#모두공집한인경우
if(len(s1)==0 and len(s2)==0):
return 65536
answer=교집합원소수/합집합원소수 * 65536
answer=int(answer)
return answer
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 프렌즈4블록 cpp // 배열빡구현, check에서 삭제처리인지검사해야 (0) | 2023.07.13 |
---|---|
프로그래머스 셔틀버스 파이썬 // 2차원 리스트 (0) | 2023.07.12 |
프로그래머스 다트게임 python // 문자열파싱 정규식 (0) | 2023.07.12 |
프로그래머스 캐시 Python cpp //LRU구현 ,tolower (0) | 2023.07.11 |
프로그래머스 비밀지도 cpp python// 비트연산 문자열 (0) | 2023.07.11 |