Tuesday 3 December 2013

Java Program that provides optimized solution for a builder


Write a java program to provide the optimised solution for the below requirements.
  1. Program should have three input parameters:
    1. Total number of rooms
    2. Minimum rooms per building
    3. Maximum room per building.
  2. Should calculate the number of rooms per building between min-max number provided
  3. Choose a factor that gives minimum reminder
  4. If there are more than one factor giving minimum reminder, choose the highest factor.
Program:
package com.builder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BuildingOptimizer {

 /**
  * @param args
  */
 public static void main(String[] args) {
  printOptimizedSolution(16, 4, 8);
 }
 
 public static void printOptimizedSolution(int totalNum, int minNum, int maxNum) {
  
  Map<Integer, Integer> reminderMap = new HashMap<Integer, Integer>();
  StringBuffer output = new StringBuffer("Optimised Solution is : " );
  
  for(int statNum = maxNum; statNum <= minNum; statNum--) {
   if(totalNum % statNum == 0) {
    reminderMap.put(0, statNum);
    break;
   }
  }
  
  if(reminderMap.size() == 0) {
   
   for(int statNum = minNum; statNum <= maxNum; statNum++) {
    reminderMap.put((totalNum % statNum), statNum);
   }
  }
  
  List<Integer> remindersList = new ArrayList<Integer>(reminderMap.keySet());
  Collections.sort(remindersList);
  
  Integer devider = reminderMap.get(remindersList.get(0));
  Integer divisions = totalNum / devider;
  
  for(int i = 1; i <= divisions; i++ ) {
   output.append(devider);
   if(i != divisions) {
    output.append(", "); // comma should not append at the end
   }
  }
  
  if(remindersList.get(0) != 0) {
   output.append(", ").append(remindersList.get(0));
  }
  
  System.out.println(output);
 }

}

No comments:

Post a Comment