
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