재귀를 쓰면 되긴 하는데 성능이 문제가 될 수 있음

스택을 써도 되지만 스택 정의하는게 부담스러움

결정적으로 둘 다 이해하는게 그리 쉽지 않을 수 있음



보통 재귀나 스택 알고리즘에 익숙하지 않은 프로그래머가

n자리 순열을 전부 출력하려면


일단 보통 가장 먼저 드는 생각은 n중 for문을 쓰는 거임..


수-도 코드로 3자리 순열 뽑는 코드를 써보면..
for i = 1~3:
    for j = 1~3:
        if j != i:
            for k = 1~3:
                if k != i:
                    if k!= j:
                        print i,j,k
(대충 파이슨으로 옮기면 작동할 것임)


이건 4자리 순열 파이슨 코오드

for i in range(1,4+1):

  for j in range(1,4+1):

    if j != i:

      for k in range(1,4+1):

        if k != i:

          if k!= j:

            for l in range(1,4+1):

              if l != i:

                if l != j:

                  if l != k:

                    print(i,j,k,l)

결과:

1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


스택도 안쓰고 재귀 호출도 없음
성능도 좋고 데이터 구조도 없고 퍄
게다가 이건 뭐 빡대가리도 이해할 수 있음
순열이나 재귀 코드보면 솔직히 좀 어려운데 이건 졸라 쉬움

치명적인 단점은 물론 n이 바뀌;면 좃되는 건데...


그니까 n중 for문을 생성하는 C 매크로나 C++ 템플릿 함수를 만들 수 없을까?



이거 만약에 되면 이거랑 비슷한 문제는 죄다 날로 쳐먹을 수 있음

주사위 n개로 합 s가 나오는 경우를 모두 출력하라

n만원을 500,100,10원으로 바꾸는 방법을 모두 출력하라

이런 거 다 될 듯 ㅇㅇ;