-
rand5(), rand7() 만들기Algorithm/problems 2018. 8. 14. 18:28
rand5(), rand7() 만들기
interview에서 나온 문제. 어떤 곳은 가면 편하고 생각이 잘 나는 반면에 어떤 곳은 머리가 하얘지는 곳이 있다. 아무래도 조금 더 부담이 되는 곳에서 그러는 것 같은데. 혼자 풀거나 사전에 시간이 있으면 충분히 할 수 있는 문제들을 보는 앞에서 바로 하려면 아무런 생각이 나지 않는다.
오늘도 망한 interview에서 나왔던 문제를 기록해 본다. 잊지 않기 위해.
문제는,
1부터 5까지 동일한 확률로 발생하는 rand5()와 1부터 7까지 동일한 확률로 발생하는 rand7()이 있을 때, 서로를 이용해 구현을 한다.
즉, rand7()을 이용해 rand5()를 구현하고, rand5()를 이용해 rand7()을 구현한다.
1. rand7()로 rand5() 만들기
연습문제,,, 였으나 긴장해서 뭐지? 했다. 쉽게 생각하라는 얘기해 풀긴 했으나 확률 맞나? 하는 의구심이 계속 들었다.
풀이는, rand7()을 호출에 나온 결과가 5이하 일 때까지 계속 반복 호출하는 것이다.
function rand5()
while(True)
n = rand7()
if n <= 5:
return n
2. rand5()로 rand7() 만들기
1번 문제를 응용하면 되나 머릿속에 아무런 생각이 나지 않았다. 결국 힌트를 받고 풀긴했으나, 한참동안 버벅이다 풀었다. 망할
방법은 rand5()로 7이상의 범위의 수를 생성하고, 7이하의 값이 나올 때까지 반복하면 된다.
즉 rand5()를 두 번 호출하면 경우의 수는 25가지가 나오고 이 중 7보다 큰 경우 반복해서 생성한다. moduler를 사용하면 21까지 moduler로 거르고 나머지만 재생성해 주면 되나 난 moduler를 사용하지 말라는 의미로 알아듣고 7까지만 사용했다. 끝나고 비효율적이라는 말을 생각하다 찾아보니 moduler를 사용하더라는...
function rand7()
while(True)
n = rand5()*(5-1) + rand()
if n <= 21:
return n%7
답답하고 아쉬운 interview였다. 난 뭘해야 하나...