최후의 생존자
최후의 생존자 알고리듬 책에 나온 문제이다. 1번 부터 n번까지 n명의 사람이 있을 때 한명은 살고 그 다음 사람은 죽는 방법으로 생존자를 결정할 때 최후까지 남는 사람은 누구인가를 알아낸다. 예를 들어 5명이 있다면 1번은 살고 2번이 죽고 3번은 살고 4번이 죽고 5번은 살고 1번이 죽고 3번은 살고 5번이 죽고 나면 3번이 최후의 생존자가 된다. 1, 2, 3, 4, 5 1, 3, 4, 5 1, 3, 5 3, 5 3 기본 프로그램은 C로 짜 보았다. #include #include #include // 인자 크기 n의 정수 배열의 s부터 시작해서 0이 아닌 첫번째 항목을 찾는다 int searchSurvivor ( int * ms , int s , int n ) { if ( s >= n ) s = 0 ; while (*( ms + s ) == 0 ) { s ++; if ( s == n ) s = 0 ; } return s ; } // 인자 n 크기의 members 정수 배열을 할당받은 후 1로 초기화 하고 // searchSurvivor 함수로 배열에서 생존자를 찾고 한번 더 함수로 // 사망자를 찾는 방식으로 구현했다. int last ( int n ) { int i = 0 , sur , * members ; members = ( int *) malloc ( sizeof ( int )* n ); for ( i = 0 ; i n ; i ++) *( members + i ) = 1 ; sur = n ; i = 0 ; while ( sur != i ) { // 마지막은 생존자와 사망자가 같은 경우, 즉 유일한 생존자 sur = searchSurvivor ( members , i , n ); // printf("생존자 %d를 찾...