#include "..\CookHeader.h"

Array <Array <string>> bookAry = { {"어린왕자", "쌩떽쥐베리"}, {"이방인", "까뮈"},
	{"부활", "톨스토이"}, {"신곡", "단테"}, {"돈키호테", "세르반테스"}, 
	{"동물농장", "조지오웰"}, {"데미안", "헤르만헤세"}, {"파우스트", "괴테"}, {"대지", "펄벅"} };
Array <Array <string>> nameIndex, authIndex;

Array <Array <string>> makeIndex(Array <Array <string>> ary, int pos) {
	Array <Array <string>> sortedAry;
	int index = 0;
	for (int i = 0; i < len(ary); i++) {
		Array <string> data = ary[i];
		sortedAry.push_back({ data[pos] , to_string(index) });
		index++;
	}
	sortArray(sortedAry); // 앞 데이터로 정렬.
	return sortedAry;
}

int bookSearch(Array <Array <string>> ary, string fData) {
	int pos = -1;
	int start = 0;
	int end = len(ary) - 1;

	while (start <= end) {
		int mid = (start + end) / 2;
		if (fData == ary[mid][0])
			return stoi(ary[mid][1]);
		else if (fData > ary[mid][0])
			start = mid + 1;
		else
			end = mid - 1;
	}
	return pos;
}

int main() {
	print("# 책장의 도서 ==>");
	printArray2(bookAry);
	println("");

	nameIndex = makeIndex(bookAry, 0);
	print("# 도서명 색인표 ==>");
	printArray2(nameIndex);
	println("");

	authIndex = makeIndex(bookAry, 1);
	print("# 작가명 색인표 ==>");
	printArray2(authIndex);
	println("");

	string findName = "신곡";
	int findPos = bookSearch(nameIndex, findName);
	if (findPos != -1) {
		println(findName + "의 작가는 " + bookAry[findPos][1] + "입니다.");
	}
	else {
		println(findName + " 책은 없습니다.");
	}

	findName = "괴테";
	findPos = bookSearch(authIndex, findName);
	if (findPos != -1) {
		println(findName + "의 도서는 " + bookAry[findPos][0] + "입니다.");
	}
	else {
		println(findName + " 작가는 없습니다.");
	}
}