본문 바로가기
알고리즘/종만북

07 - 쿼드 트리 QUADTREE_SOL

by sun__ 2019. 6. 30.
#include <iostream>
#include <string>
using namespace std;

string reverse(string::iterator& it) {
	char head = *it;
	++it;
	if (head == 'b' || head == 'w') return string(1, head); //head string형태 return
	string upperLeft = reverse(it);
	string upperRight = reverse(it);
	string lowerLeft = reverse(it);
	string lowerRight = reverse(it);
	return string("x") + lowerLeft + lowerRight + upperLeft + upperRight;
}

int main() {
	int tc;
	cin >> tc;
	while (tc--) {
		string inputStr;
		cin >> inputStr;
		auto iter = inputStr.begin();
		cout << reverse(iter) << '\n';
	}
}

어떻게 이런 생각을 할까..

 

반복가 참조형으로 전달되기 때문에 재귀 호출 내부에서 반복자를 옮기면 밖에서도 그 변화가 전달되게 됨. s를 미리쪼개지 않고도 필요한 만큼만 가져다 쓰게 할 수 있다. 때문에 재귀에서 좌상단,우상단,좌하단,좌상단 순서대로 자연스럽게 문자열을 분해해 줄 수 있다. (좌상단 문자열 파악하고 저장하면 다음 반복자는 우상단 head를 가리킴)

 

.......................

알고스팟에 문제가 올라가있는 걸 모르고 있어서 여태 테스트케이스만 맞추면 넘어갔는데,, 쿼드트리 제외하고 저번 문제들은 알고스팟에 코드 넣어보니까 틀렸다고 뜬다..ㅠㅠ