링크 : https://programmers.co.kr/learn/courses/30/lessons/72411
문제
문자열의 부분문자열
부분문자열(substring)이란 쉽게말해서 문자열을 구성하고 있는 문자열이다.
예를들어 ‘abcd’
의 경우,
길이가 1인 문자열 [ a, b, c, d ]
, 길이가 2인 문자열 [ ab, bc, cd ]
길이가 3인 문자열 [ abc, bcd ]
, 길이가 4인 문자열 [ abcd ]
조합을 사용한 문자열
문제를 잘 읽어보면 ‘부분문자열의 순서' 는 중요하지않다고 말한다.
만약 ab
, ba
가 있다면 이 두개는 사실 같은문자열으로 취급해줘야한다.
이때 사용하는 라이브러리가 from itertools import combinations
이다.
소스코드(해설)
for cour in course :
kv_dict = dict()
for order in orders :
#갯수별로 combination -> for문돌면서 key로 카운팅
temp = list(combinations(order,cour))
for idx in temp :
tmp = "".join(idx)
tmp2 = list(tmp)
tmp2.sort()
tmp2 = "".join(tmp2)
if tmp2 in kv_dict.keys() :
kv_dict[tmp2] += 1
else :
kv_dict[tmp2] = 1
요구하는 길이별로 combinations
를 만든다.
이후 해당 내용으로 for
문을 돌되, combinations
내부에서는 set()
의 형태를 띄고있으니, 이를 str화 시켜서 dict()
의 Key
로 구성한다.
#가장 많은 갯수를 단어를 계산
arr = []
temp = 0
for k,v in kv_dict.items() :
if v>temp :
arr=[k]
temp = v
elif v==temp :
arr.append(k)
else :
pass
if temp >= 2 : #문제조건. 2미만은 제외
arr2.append(arr)
dict()를 돌면서, 가장 많은 횟수로 나온 단어를 결과배열로 넣는다
소스코드(전체)
def solution(orders, course):
answer = []
arr2 = []
from itertools import combinations
for cour in course :
kv_dict = dict()
for order in orders :
#갯수별로 combination -> for문돌면서 key로 카운팅
temp = list(combinations(order,cour))
for idx in temp :
tmp = "".join(idx)
tmp2 = list(tmp)
tmp2.sort()
tmp2 = "".join(tmp2)
if tmp2 in kv_dict.keys() :
kv_dict[tmp2] += 1
else :
kv_dict[tmp2] = 1
#가장 많은 갯수를 단어를 계산
arr = []
temp = 0
for k,v in kv_dict.items() :
if v>temp :
arr=[k]
temp = v
elif v==temp :
arr.append(k)
else :
pass
if temp >= 2 : #문제조건. 2미만은 제외
arr2.append(arr)
#정렬 후 리턴
for i in arr2 :
for j in i :
answer.append(j)
answer.sort()
return answer
'CodingTest' 카테고리의 다른 글
백준 11725 트리의 부모 찾기 파이썬 (0) | 2022.07.05 |
---|---|
백준 1260 DFS와 BFS (0) | 2022.07.05 |
백준 11660 구간 합 구하기5 파이썬 (0) | 2022.07.01 |
백준 2109 순회강연 파이썬 (0) | 2022.07.01 |
백준 13913 숨바꼭질4 파이썬 (0) | 2022.06.16 |