책 내용 질문하기
난수?
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
97
조회수
106
작성일
2019-06-12
작성자
탈퇴*원
첨부파일
랜덤숫자인건 알겠는데 알고리즘 부교재 37쪽을 오른쪽 밑에 전문가의 조언에서 time(NULL)은 난수의 기준값을 현재 시간으로 설정, 현재 시간의 초에 해당하는 값을 10자리 정수값으로 반환한다고 했는데 이게 정확히 무슨 말인가요? 원 교재 97쪽 예제2에서 sprand(time(NULL)) 하였고 표를 보면 rand()에 18560, 8056 막 이러던데 이건 또 뭔가요? 현재 시간에 초에 해당하는 게 저 숫자 맞나요?
답변
2019-06-13 10:10:41

안녕하세요 길벗수험서 운영팀입니다.

 

함수 정의를 먼저 정리해보죠.

 

rand함수는 'srand함수로 설정된 수'를 기반으로 어떠한 공식을 통해 0~32767 사이의 '특정 수'들을 나열합니다.

즉, srand함수로 설정된 수가 변하지 않고 고정되어 있다면 rand함수를 수십수백번 돌려도 동일한 수들이 나열됩니다.

아래 화면처럼 말이죠


 

 

srand함수는 rand값을 출력하는데 기준이 되는 수를 전달해주는 역할을 하죠.

 

time(NULL)은 현재 시간에서 1970년 1월 1일 00:00을 뺀 시간의 '초' 단위 값을 구합니다.

즉 현재 시간이 1970년 1월 2일 00:00이라면 24시간이 지났으니 24시간을 초로 환산한 86400이라는 값이 나옵니다.

 

----------

 

이제 보죠.

 

rand함수는 srand로 설정된 값을 기반으로 무작위 값을 뽑아냅니다.

time(null)이 프로그램을 수행하는 시간에서 1970년 1월 1일 00:00 을 뺀 '초단위' 시간을 의미하니, 이 값을 기준으로

rand함수의 값이 나열되겠네요.

 

따라서 srand(time(null)), rand() 는 1~32767 사이의 값을 특정 공식에 따라 초단위로 다른 값들을 나열해주게 됩니다.

단순히 말해 그냥 매초 마다 다른 유형의 무작위 값을 출력시켜주는 것이죠.

 

교재 97쪽의 rand()함수의 값은 그저 교재를 제작할 때 나온 rand()값을 임의로 적어넣은 것입니다.

만약 지금 그대로 다시 돌린다고 해도 srand(time(null))의 값이 달라지므로 다른 값이 나오게 되겠죠.

 

행복한 하루되세요 :)

  • 관리자
    2019-06-13 10:10:41

    안녕하세요 길벗수험서 운영팀입니다.

     

    함수 정의를 먼저 정리해보죠.

     

    rand함수는 'srand함수로 설정된 수'를 기반으로 어떠한 공식을 통해 0~32767 사이의 '특정 수'들을 나열합니다.

    즉, srand함수로 설정된 수가 변하지 않고 고정되어 있다면 rand함수를 수십수백번 돌려도 동일한 수들이 나열됩니다.

    아래 화면처럼 말이죠


     

     

    srand함수는 rand값을 출력하는데 기준이 되는 수를 전달해주는 역할을 하죠.

     

    time(NULL)은 현재 시간에서 1970년 1월 1일 00:00을 뺀 시간의 '초' 단위 값을 구합니다.

    즉 현재 시간이 1970년 1월 2일 00:00이라면 24시간이 지났으니 24시간을 초로 환산한 86400이라는 값이 나옵니다.

     

    ----------

     

    이제 보죠.

     

    rand함수는 srand로 설정된 값을 기반으로 무작위 값을 뽑아냅니다.

    time(null)이 프로그램을 수행하는 시간에서 1970년 1월 1일 00:00 을 뺀 '초단위' 시간을 의미하니, 이 값을 기준으로

    rand함수의 값이 나열되겠네요.

     

    따라서 srand(time(null)), rand() 는 1~32767 사이의 값을 특정 공식에 따라 초단위로 다른 값들을 나열해주게 됩니다.

    단순히 말해 그냥 매초 마다 다른 유형의 무작위 값을 출력시켜주는 것이죠.

     

    교재 97쪽의 rand()함수의 값은 그저 교재를 제작할 때 나온 rand()값을 임의로 적어넣은 것입니다.

    만약 지금 그대로 다시 돌린다고 해도 srand(time(null))의 값이 달라지므로 다른 값이 나오게 되겠죠.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.