1. dfs 를 차용한 재귀

알고리즘 : dfs
구현 : 재귀

def dfs(mylist, visited = [], answer = []) :
    if len(visited) == len(mylist) :
        # answer.append(visited) -> visited의 주소지가 재귀 안에서 공유되어 모든 answer의 원소가 같은 값이 되는 문제 발생.
        answer.append(visited.copy())
        return answer
    for m in mylist :
        if m in visited : continue
        visited.append(m)
        answer = dfs(mylist, visited, answer)
        visited.pop()
    return answer

<< 알고리즘 모식도 첨부 예정 >>


2. 반복문, 인덱싱, 스위칭 (마법인가?)

def permute(arr):
    result = [arr[:]]
    c = [0] * len(arr)
    i = 0
    while i < len(arr):
        if c[i] < i:
            if i % 2 == 0:
                arr[0], arr[i] = arr[i], arr[0]
            else:
                arr[c[i]], arr[i] = arr[i], arr[c[i]]
            result.append(arr[:])
            c[i] += 1
            i = 0
        else:
            c[i] = 0
            i += 1
    return result

3. itertools 라이브러리 .permutation

import itertools

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 순열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 순열 만들기
profile
지도 조각을 찾아서

0개의 댓글