7.1.3 순열 알고리즘 테스트 코드 작성

먼저 시뮬레이션에 사용할 초기 바구니에 넣을 공의 집합을 생성하는 함수를 작성할게요.

먼저 동적 배열을 생성합니다.

0번 공부터 9번 공까지 순차적으로 이동하면서 배열에 순차 보관합니다.

보관할 자료형이 포인터 형식이 아니므로 강제 형변환하여 보관할게요.

공을 보관한 배열을 반환합니다.

 

이제 테스트 코드를 작성합시다.

테스트를 위해 스택이 필요하므로 변수를 선언합시다.

경험 정보도 필요하므로 변수를 선언합시다.

초기에 공을 보관할 배열을 위한 변수도 선언합니다.

알고리즘 내부에서는 현재 경험에서 다음 경험 목록을 조사해야 합니다. 이 때 다음 경험 목록을 보관할 배열이 필요하므로 이를 위한 변수도 선언합시다.

조사한 경험 목록을 순차적으로 방문해야 하므로 반복자도 선언합시다.

먼저 바구니에 담을 공의 집합을 동적으로 생성하는 InitSimulation 함수를 호출합니다.

순열 알고리즘 테스트 코드를 작성하기 전에 동적 알고리즘을 다시 한 번 살펴봅시다.

 

동적 알고리즘

    초기 경험 정보를 생성

    스택에 초기 경험 정보 Push

    반복(스택이 빌 때까지)

        스택에서 경험 정보를 Pop

        꺼낸 온 경험에서 발생할 수 있는 다음 경험 정보 조사

        반복(다음 경험 정보들을 순차적으로)

            조건(결과에 도달하지 않았다면)

                스택에 경험 정보를 Push

            그렇지 않다면

                결과에 보관

 

먼저 스택을 생성합니다.

초기 경험 정보를 생성하고 이를 스택에 보관합니다.

스택이 빌 때까지 반복합니다.

스택에서 경험 정보를 꺼내옵니다.

현재 경험정보에서 다음 경험 정보를 조사합니다. 이를 위해 다음 경험 정보를 보관할 동적 배열도 생성합니다.

조사한 다음 경험 정보의 시작과 끝을 얻어옵니다.

순차적으로 이동하면서 다음 경험 정보를 참조합니다.

만약 결론에 도달했다면 이를 출력하고 동적 경험 정보를 소멸할게요. 여기에서는 3개의 공을 꺼냈을 때 결론에 도달한 것으로 할게요.

결론에 도달하지 않으면 다시 스택에 보관합니다.

다음 경험 정보를 보관했던 동적 배열을 소멸합니다.

시뮬레이션에 사용한 버켓과 스택을 소멸합니다.

출력 결과가 하나의 콘솔 화면의 범위를 벗어나서 확인하기 까다롭다면 콘솔 명령 화면에서 다음과 같이 실행해 보세요.

[그림 7.3] 콘솔 명령어에서 파이프 사용

[그림 7.3] 콘솔 명령어에서 파이프 사용

 

[그림 7.3]처럼 콘솔 명령어를 사용하면 >> 뒤에 명시한 파일로 출력합니다. 결과 파일을 더블 클릭하여 원하는 모든 결과를 출력하는지 확인해 보세요.