SAMSUNG/삼성 SW 역량 테스트 준비

순열과 조합 (직접 구현 & itertools 라이브러리)

sanadoing_ 2023. 10. 13. 10:11
728x90

코테를 준비하고 있는데요 !!
22년도 하반기까지 itertools나 sys와 같은 라이브러리를 사용 못했다고 해서

문의는 드렸으나 일단 직접 구현하는 방식으로 그냥 외워둬야겠어요

 

 

 

 

BFS를 활용한 순열 💭

N = 3
arr = [1, 2, 3]

sel = [0] * N
check = [0] * N
result = []

def perm(idx):
    global result
    if idx == N:
        print(sel)
    else:
        for i in range(N):
            if check[i] == 0:
                sel[idx] = arr[i]
                check[i] = 1
                perm(idx+1)
                check[i] = 0


perm(0)
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

 

 

 

 

재귀함수를 이용한 조합 💭

def comb(arr, n):
    result = []
    if n > len(arr):
        return result
    if n == 1:
        for i in arr:
            result.append([i])
    elif n > 1:
        for i in range(len(arr) - n + 1):
            for j in comb(arr[i + 1:], n - 1):
                result.append([arr[i]] + j)

    return result


arr = [1, 2, 3]
print(comb(arr, 1))
print(comb(arr, 2))
print(comb(arr, 3))
[[1], [2], [3]]
[[1, 2], [1, 3], [2, 3]]
[[1, 2, 3]]

 

 

 

 

 

 

itertools 라이브러리를 이용한 순열, 조합 💭

import itertools

arr1 = [1, 2, 3, 4]

for i in itertools.permutations(arr1, 4):
    print(list(i), end=' ')

for i in itertools.combinations(arr1, 3):
    print(list(i), end=' ')

 

 

 

 

 

728x90