링크 : 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
jjongguet