문제 설명
귀여운 차차는 열심히 연구를 하던 중 차차의 컴퓨터에서는 정상적으로 동작하지만, 다른 사람 컴퓨터에선 완전히 다른 결과가 나오는 현상을 발견하였다.
특히 차차가 작성한 알고리즘은 오직 랜덤 함수만 있었기 때문에, 코드의 문제는 없을거라 생각하였다.
그래서 차차는 열심히 나와 다른 사람들간에 차이가 무엇인지 확인하였다.
그 결과 차이점은 오직 단 하나 컴퓨터의 운영체제가 다르다는 것을 알게 되었다.
차차의 컴퓨터는 맥북이였지만, 다른 사람의 컴퓨터는 리눅스이거나 윈도우라는 것이였다.
그래서 차차는 이를 악용하여 오직 맥북을 소유한 사람만 풀 수 있는 재미난 문제를 만들기로 하였다.
그것은 바로 초기 랜덤 시드값을 10으로 고정한 상태에서 랜덤값을 10번 출력한 값을 출력하도록 만드는 것이다.
그렇게 하게 된다면 오직 맥에서만 차차와 같은 값이 출력되게 되므로, 윈도우나 리눅스를 사용하고 있다면 해당 문제를 풀 수가 없게 된다.
이유:
리눅스는 random 함수를 "SVID 3, BSD 4.3, ISO 9899" 사용중이며
맥북은 Arc4Random 알고리즘을 사용하고 있기 때문에 차이가 발생한다.
윈도우는 따로 알려지지 않았다.
출력 설명
총 10회,
srand(10);
for (int i = 0; i < 10; i++){
printf("%d\n", rand();
}
위의 코드로 출력된 값을 출력한다.
705894
1126542223
1579310009
565444343
807934826
421520601
2095673201
1100194760
1139130650
552121545
도움
맥을 사용하고 있다면, 아래의 코드를 복사해서 붙여넣은 결과를 출력하면된다.
당연하게도, ascode 서버는 리눅스이므로 아래의 코드를 그대로 기입하면 틀리게 된다.
#include <stdio.h>
#include <random.h>
int main() {
srand(10);
for (int i = 0; i < 10; i++) {
printf("%d\n", rand());
}
return 0;
}