개발자 Q&A

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

2025.07.23 06:50

str_shuffle() 함수 사용 시 문제 발생

목록
  • Perl매니아 17시간 전 2025.07.23 06:50 새글
  • 7
    1
제가 str_shuffle() 함수를 사용하여 문자열을 섞으려는데, 특정 문자가 반복되는 것을 방지하는 방법을 모르겠습니다. 현재 코드는 다음과 같습니다.

c

#include 

#include 

#include 



int main() {

    std::string str = "abcdef";

    std::string shuffled = str;

    std::shuffle(shuffled.begin(), shuffled.end(), std::mt19937(std::random_device{}()));

    std::cout << shuffled << std::endl;

    return 0;

}



이 코드는 문자열을 섞는 데 성공하지만, 특정 문자가 반복되는 것을 방지하는 방법을 모르겠습니다. 예를 들어, "a"가 반복되지 않도록 섞을 수 있는 방법은 무엇인가요?

    댓글목록

    profile_image
    나우호스팅  17시간 전



    str_shuffle() 함수 대신 std::shuffle() 함수를 사용하는 것이 좋습니다. std::shuffle() 함수는 특정 문자의 반복을 방지할 수 있습니다.

    #hostingforum.kr
    cpp
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        std::string str = "abcdef";
    
        std::string shuffled = str;
    
        std::random_device rd;
    
        std::mt19937 g(rd());
    
        std::shuffle(shuffled.begin(), shuffled.end(), g);
    
        std::cout << shuffled << std::endl;
    
        return 0;
    
    }
    
    


    위 코드에서 std::shuffle() 함수를 사용하여 문자열을 섞습니다. std::random_device를 사용하여 고유한 시드를 생성하고, std::mt19937을 사용하여 난수를 생성합니다. 이 난수는 std::shuffle() 함수의 인수로 전달되어 문자열을 섞습니다.

    또한, 특정 문자가 반복되지 않도록 섞으려면, 문자열의 각 문자를 섞기 전에 해당 문자가 이미 섞인 적 있는지 확인하는 방법을 사용할 수 있습니다. 예를 들어, "a"가 이미 섞인 적 있는지 확인하고, 그렇지 않으면 섞습니다.

    #hostingforum.kr
    cpp
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        std::string str = "abcdef";
    
        std::string shuffled = str;
    
        std::random_device rd;
    
        std::mt19937 g(rd());
    
        std::shuffle(shuffled.begin(), shuffled.end(), g);
    
        std::cout << shuffled << std::endl;
    
    
    
        for (int i = 0; i < shuffled.size(); i++) {
    
            for (int j = i + 1; j < shuffled.size(); j++) {
    
                if (shuffled[i] == shuffled[j]) {
    
                    std::swap(shuffled[i], shuffled[j]);
    
                    std::shuffle(shuffled.begin() + i + 1, shuffled.end(), g);
    
                    break;
    
                }
    
            }
    
        }
    
        std::cout << shuffled << std::endl;
    
        return 0;
    
    }
    
    


    위 코드에서, 섞인 문자열을 확인하고, 특정 문자가 반복되는 경우를 확인하여 반복되지 않도록 섞습니다.

    2025-07-23 06:51

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

검색

게시물 검색