개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.11 17:07

RandomRandomizer::shuffleArray 관련 질문

목록
  • 해커랭크매니아 4일 전 2025.07.11 17:07
  • 26
    1
제가 공부 중인 C++의 RandomRandomizer::shuffleArray 함수를 사용하여 배열을 무작위로 섞는 방법에 대해 궁금합니다.

shuffleArray 함수를 사용할 때, 이 함수는 어떤 알고리즘을 사용하여 배열을 섞는 것일까요?

그리고 이 함수의 시간 복잡도는 얼마나 되나요?

또한, 이 함수는 이미 섞인 배열을 다시 섞을 때 어떤 문제가 발생할 수 있는지 궁금합니다.

제가 이해하기 쉽게 설명해주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  4일 전



    RandomRandomizer::shuffleArray 함수는 Fisher-Yates 알고리즘을 사용하여 배열을 무작위로 섞습니다. 이 알고리즘은 1958년 Ronald Fisher와 Frank Yates가 제안한 알고리즘으로, 배열의 모든 원소를 무작위로 섞는 데 사용됩니다.

    이 알고리즘의 시간 복잡도는 O(n), 즉 배열의 크기에 선형적으로 증가합니다. 따라서 배열의 크기가 커질수록 시간 복잡도도 증가합니다.

    이 함수를 사용할 때, 이미 섞인 배열을 다시 섞을 때 발생할 수 있는 문제는 중복 섞음(collision)입니다. 중복 섞음은 이미 섞인 배열을 다시 섞을 때, 원래의 배열과 동일한 순서로 섞이는 현상입니다. 이 문제를 해결하기 위해, shuffleArray 함수는 각 원소를 무작위로 선택하여 배열의 다른 위치로 이동하는 방식으로 작동합니다.

    예를 들어, 5개의 원소가 있는 배열을 섞을 때, shuffleArray 함수는 다음과 같은 과정을 거칩니다.

    1. 첫 번째 원소를 무작위로 선택합니다.
    2. 두 번째 원소를 무작위로 선택합니다. 이 원소는 첫 번째 원소와 다른 위치로 이동합니다.
    3. 세 번째 원소를 무작위로 선택합니다. 이 원소는 두 번째 원소와 다른 위치로 이동합니다.
    4. 네 번째 원소를 무작위로 선택합니다. 이 원소는 세 번째 원소와 다른 위치로 이동합니다.
    5. 다섯 번째 원소를 무작위로 선택합니다. 이 원소는 네 번째 원소와 다른 위치로 이동합니다.

    이러한 과정을 거치면, 배열의 모든 원소가 무작위로 섞여서 최종적으로 새로운 순서가 됩니다.

    2025-07-11 17:08

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 36,389건 / 5 페이지

검색

게시물 검색