🖥

[python3] itertools 없이 다음 순열 구하기 (C++ next_permutation 파이썬으로 구현)

망록 2023. 4. 10.

 

 

 

itertools 없이 순열조합 구하기 글이 조회수가 제법 잘 나와서 늘 의아했음

(파이썬 초보일때 자바코드 그대로 옮겨놓은거라 파이썬스러운 코드도 아니고 여러모로 거지같이 옮겨졌는데도,,,)

 

[🖥] - [Python] 순열조합 itertools 없이 직접 구현하기 (순열 조합 중복순열 중복조합 )

 

 

 

약간 저학년 전공과목에서 처음에 라이브러리없이 쌩으로 직접 짜보면서 공부할때나 필요할 줄 알고 정리해서 올려보았는데,,

삼성 역량테스트 준비하다보니 이게 필요하다는 걸 깨달은거임,,,,,

이 글 찾아오신 분들도 그런 이유로 찾은게 맞을까요??!?!!? 

 

 

 

 

 

 

 

 

 

def next_permutation(a):
    i = len(a) - 1
    j = len(a) - 1
    k = len(a) - 1
    
    while i > 0 and a[i-1] >= a[i]:
        i -= 1

    if i == 0:
        return False
    
    while a[i-1] >= a[j]:
        j -= 1

    a[i-1], a[j] = a[j], a[i-1]

    while i < k:
        a[i], a[k] = a[k], a[i]
        i += 1
        k -= 1
    return a

 

 

 

C++에서는 next_permutation(arr)이라는 함수가 있어서

만약에 [1,2,3]이라는 배열을 인자로 주면

[1,3,2]인 다음 순열을 리턴해주나보다

 

파이썬과 자바에는 이런 함수가 없어서 직접 짜서 쓰는듯

이외에 dfs로도 구할 수 있지만 하여간,, 이것도 한가지 방법인거임~~~!! 

 

 

 

 

 

댓글