private void findOptimalSeatsPerTable(){
		int totalGuests = guests.size();
		if(totalGuests < tableSize){
			seatsPerTable.add(totalGuests);
			return;
		}
		//greedily select for tables
		//result: will have tables with max capacity + 1 table with totalGuests%tableSize number
		for(int i = 0; i < guests.size();){
			if(totalGuests > tableSize){
				totalGuests -= tableSize;
				seatsPerTable.add(tableSize);
				i += tableSize;
			}
			else{
				seatsPerTable.add(totalGuests);
				i += totalGuests;
			}
		}
		
		//check if possible to optimize
		if(seatsPerTable.lastElement() < minTableSize){
			int difference = minTableSize - seatsPerTable.lastElement();
			
			int numberOfTables = seatsPerTable.size();
			if(difference > numberOfTables - 1){	//if there aren't enough tables to bring over
				totalGuests = guests.size();
				float perTable = (float)totalGuests / (float)numberOfTables;
				int remaining = totalGuests % numberOfTables;
				
				seatsPerTable = new Vector<Integer>();
				for(int i = 0; i < numberOfTables; i++){
					seatsPerTable.add((int)perTable);
				}
				seatsPerTable.set(0, seatsPerTable.get(0) + remaining);
				
				return;
			}
		}
		
		//optimize - if last table is less than minTableSize, bring guests over from other tables
		while(seatsPerTable.lastElement() < minTableSize){
			int index = seatsPerTable.size() - 1;
			for(int i = index; i > 0; i--){
				//decrement size of 1 table
				seatsPerTable.set(i, seatsPerTable.get(i)-1);
				//increment size of last table
				seatsPerTable.set(seatsPerTable.size()-1, seatsPerTable.lastElement()+1);
				if(seatsPerTable.lastElement() >= minTableSize)
					break;
			}
		}
		
		
	}