<div>댓글에 답글을 달려하니 동일한글자를 반복적으로 쓸 수 없다고 해서 </div> <div>새로 글을 썼습니다.</div> <div><br>예전에 비슷한 걸 만든 기억이 있어 코드를 찾아봤네요.</div> <div>배경 지식은 <a target="_blank" href="http://jinsolkim.kr/50187137320" target="_blank">http://jinsolkim.kr/50187137320</a> 에서 얻었습니다.<br></div> <div>다시 보니 뭔소린지... 가물가물하네요. ;</div> <div> </div> <div>아무튼, 아래 코드와 같이 돌려 원하는 값을 얻었습니다.</div> <div>뭔가 지저분해 보이는 느낌도 들고... ㅜ.ㅠ</div> <div> </div> <div> </div> <div>#include <cstdio><br>#include <cstring><br>#include <string></div> <div>#include <list><br>#include <set><br>#include <algorithm></div> <div>using namespace std ;</div> <div>int reverseList(list<int>* listInt, list<int>::iterator listIntIter)<br>{<br> set<int> setInt ;<br> set<int>::iterator setIntIter ;</div> <div> while(listIntIter != listInt->end())<br> {<br> setInt.insert(*listIntIter) ;<br> listIntIter = listInt->erase(listIntIter) ;<br> }</div> <div> if(setInt.empty())<br> return 0 ;</div> <div> setIntIter = setInt.end() ;<br> while(1)<br> {<br> setIntIter-- ;<br> listInt->push_back(*setIntIter) ;<br> if(setIntIter == setInt.begin())<br> break ;<br> }</div> <div> return 1 ;<br>}</div> <div>int next_k_combination(list<int>* listInt, int k)<br>{<br> list<int>::iterator listIntIter ;<br> list<int>::iterator listEndIter ;<br> list<int>::iterator listNextIter ;</div> <div> int flagIsSorted = 0 ;</div> <div> while(1)<br> {<br> listIntIter = listInt->begin() ;<br> for(int ii = 0; ii < k; ii++)<br> listIntIter++ ;</div> <div> reverseList(listInt, listIntIter) ;<br> if(!next_permutation(listInt->begin(), listInt->end()))<br> return 0 ;</div> <div> // check isSorted?<br> flagIsSorted = 1 ;<br> listIntIter = listInt->begin() ;<br> for(int ii = 0; ii < k - 1; ii++)<br> {<br> listNextIter = (++listIntIter)-- ;</div> <div> if(*listIntIter > *listNextIter)<br> {<br> flagIsSorted = 0 ;<br> break ;<br> }</div> <div> listIntIter++ ;<br> }<br> if(flagIsSorted)<br> return 1 ;<br> }<br> return 0 ;<br>}</div> <div>int main()<br>{<br> list<int> listTest ;<br> list<int>::iterator listTestIter ;</div> <div><br> listTest.push_back(0) ;<br> listTest.push_back(1) ;<br> listTest.push_back(2) ;<br> listTest.push_back(3) ;<br> listTest.push_back(4) ;</div> <div> int val[5] = {1, 3, 2, 2, 4} ;<br> int ret ;</div> <div> while(1)<br> {<br> listTestIter = listTest.begin() ;<br> for(int ii = 0; ii < 3; ii++)<br> {<br> printf("%d ", val[*listTestIter++]) ;<br> }<br> printf("\n") ;</div> <div> ret = next_k_combination(&listTest, 3) ;</div> <div> if(!ret)<br> break ;<br> }<br> return 1 ;<br>}</div> <div> </div> <div>그럼, 즐프하세요~ ^^</div> <div> </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.