더북(TheBook)

1.4.23 잘못된 셔플링. 1.4절 배열의 기본 응용의 셔플링 코드에서 in-1 사이 대신 0n-1 사이의 난수를 골랐다고 가정해보자. 셔플링한 후 해당 순서로 될 확률이 1/n! 확률이 아님을 실험으로 확인하라. 앞에서 테스트한 코드를 이 버전의 셔플링 코드에 적용해 실행해보라.

 

1.4.24 음악 셔플링. 음악 재생기를 셔플 모드로 설정했다고 생각해보자. 셔플 모드에서는 전체 노래를 한 번씩 재생하기 전에는 한 노래를 두 번 재생하지 않는다. 순서대로 재생(2번 곡 다음에 3번 곡이 재생되거나 9번 곡 다음에 10번 곡이 재생되는 등)되는 노래가 하나도 없을 가능성을 추정하는 프로그램을 작성하라.

 

1.4.25 순열에서의 최솟값들. 명령 줄에서 인수로 정수 n을 입력받고, 길이가 n인 무작위 순열을 생성해 출력하고, 순열에서 왼쪽에서-오른쪽으로의 최솟값(left-to-right minima)(현재 요소가 지금까지 본 숫자 중 가장 작은 수인 경우)인 수의 개수를 출력하는 프로그램을 작성하라. 그러고 나서 명령 줄에서 인수로 정수 mn을 입력받아, 길이가 n인 무작위 순열 m개를 생성한 후, 생성된 순열에서 왼쪽에서-오른쪽으로의 최솟값들의 평균 발생 횟수를 출력하라. 보너스: 길이가 n인 순열에서 왼쪽에서-오른쪽으로의 최솟값들의 개수를 n의 함수로 정의하라.

 

1.4.26 역순열. 명령 줄에서 0에서 n-1까지 n개의 인수로 된 순열을 읽고 역순열을 출력하는 프로그램을 작성하라. 배열 a[]가 순열이면 역순열 b[]a[b[i]] = b[a[i]] = i를 만족한다. 입력된 순열이 올바른 순열인지 반드시 검사해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.