#include<iostream>#include<list>usingnamespacestd;// 나중에 수정voidreset(char*text){for(inti=0;i<1000;i++)text[i]=' ';}// 나중에 수정intcheckText(char*text){for(inti=0;i<1000;i++){if(text[i]==' ')returni;}return1000;}//리스트의 마지막 값을 리턴list<char>::iteratorcheckEnd(list<char>&text){list<char>::iteratoriter=text.end();--iter;// end는 NULL이므로returniter;}list<char>::iteratorreverseText(list<char>&text,list<char>::iteratorstart,list<char>::iteratorend){list<char>::iterator*t=newlist<char>::iterator[4];if(*text.begin()!='x')returnend;//맨 처음이 x인 경우for(inti=0;i<4;i++){++end;t[i]=end;if(*end=='x'){end=reverseText(text,start,end);}}//4개가 모두 x가 아닐때if(end!=checkEnd(text)&&*t[3]!='x'){++t[3];text.insert(t[0],t[2],t[3]);end=text.erase(t[2],t[3]);--end;}//맨 끝이 x인 경우elseif(end!=checkEnd(text)&&*t[3]=='x'){end=t[3];for(inti=0;i<4;i++){++end;if(*end=='x')i-=4;}++end;text.insert(t[0],t[2],end);end=text.erase(t[2],end);--end;}//마지막 값인 경우elseif(end==checkEnd(text)){end=text.end();text.insert(t[0],t[2],end);text.erase(t[2],end);delete[]t;returntext.begin();}delete[]t;returnend;}intmain(){intcount=0;intt=0;char*text;cin>>count;for(inti=0;i<count;i++){text=newchar[1000];list<char>tex;list<char>::iteratoriter;reset(text);cin>>text;t=checkText(text);for(inti=0;i<t;i++)tex.push_back(text[i]);reverseText(tex,tex.begin(),tex.begin());for(iter=tex.begin();iter!=tex.end();iter++)cout<<*iter;cout<<endl;delete[]text;}return0;}
QUADTREE 문제를 리스트를 이용하여 풀었습니다. char 배열을 이용해서 각 배열바다 값을 하나씩 받고 이 값들을 list에 넣어 주었습니다.
그리고 reverseText 함수를 이용하여 x 1 2 3 4 가 입력이 되면 리스트에서 1번 위치에 3 4의 값을 삽입하고 3 4를 지워서 x 3 4 1 2 가 되도록 하는 원리로 함수를 작성했습니다.
각 호출되는 함수당 최대 4번 재귀함수를 호출하고 각 함수에서 iterator 배열이 존재하여 위에서 x 1 2 3 4 에서 각 1 2 3 4의 위치를 나타내게 하였습니다.
end iterator가 문자열의 끝에 도달하기 전에는 각 만나는 x에서
x 3 4 1 2로 위치를 바꾸고
x가 4번째 위치에 있을 때 따로 예외를 처리하여 x 3 4 1 2 가 되도록 했고 end iterator를 이용하여 입력한 문자열의 마지막에 도달했을 경우 전체의 문자열에서 x 3 4 1 2 가 되도록 했습니다.
나름 여러가지 예제를 그려보면서 입력해봤는데 오류가 나는 케이스를 아직 발견하지 못했습니다.
PuzzleLeaf
QUADTREE 문제를 리스트를 이용하여 풀었습니다. char 배열을 이용해서 각 배열바다 값을 하나씩 받고 이 값들을 list에 넣어 주었습니다.
그리고 reverseText 함수를 이용하여 x 1 2 3 4 가 입력이 되면 리스트에서 1번 위치에 3 4의 값을 삽입하고 3 4를 지워서 x 3 4 1 2 가 되도록 하는 원리로 함수를 작성했습니다.
각 호출되는 함수당 최대 4번 재귀함수를 호출하고 각 함수에서 iterator 배열이 존재하여 위에서 x 1 2 3 4 에서 각 1 2 3 4의 위치를 나타내게 하였습니다.
end iterator가 문자열의 끝에 도달하기 전에는 각 만나는 x에서
x 3 4 1 2로 위치를 바꾸고
x가 4번째 위치에 있을 때 따로 예외를 처리하여 x 3 4 1 2 가 되도록 했고 end iterator를 이용하여 입력한 문자열의 마지막에 도달했을 경우 전체의 문자열에서 x 3 4 1 2 가 되도록 했습니다.
나름 여러가지 예제를 그려보면서 입력해봤는데 오류가 나는 케이스를 아직 발견하지 못했습니다.
8년 전