En este post te voy a explicar como resolví el problema de HackerRank: Equals.
Primeros pasos.
Antes de empezar. La solución de este problema la tome del artículo de Nikoo28. El problema en cuestión, consiste en nivelar una serie de valores usando incrementos o decrementos de 1, 2 y 5.
El problema describe la problemática de Christine. Ella debe asegurarse que todos sus compañeros tienen el mismo número de chocolates. Para lograr esto, ella puede agregar el mismo número de chocolates a todos sus compañeros, excepto uno; la segunda opción es remover chocolates de un compañero.
El problema tiene dos enfoques. Resolver el problema igualando el número de chocolates al valor máximo, o igualar el número de chocolates alcanzando el valor mínimo.
Como vas a emplear los mismos números para igualar, el resultado. Es posible que tengas diferencias de 1 a 4 elementos. El algoritmo en cuestión, valida estas posibilidades para elegir la mejor solución.
Solución.
def equal(arr:Array[Int]) = { | |
val possibilities: Array[Int] = Array.ofDim(5) | |
var minimum = arr.min | |
possibilities.indices.foreach(currentPossibility => { | |
arr.foreach(colleagueAmount => { | |
val difference = colleagueAmount - minimum | |
val stepsRequired = getStepsRequired(difference) | |
updatePossibilitiesArray(currentPossibility, stepsRequired) | |
}) | |
minimum -= 1 | |
}) | |
def updatePossibilitiesArray(currentIndex:Int, stepsRequired:Int): Unit = { | |
possibilities.update(currentIndex, possibilities(currentIndex) + stepsRequired) | |
} | |
def getStepsRequired(chocolatesAmount:Int) = | |
chocolatesAmount / 5 + | |
(chocolatesAmount % 5) / 2 + | |
((chocolatesAmount % 5) % 2) / 1 | |
possibilities.min | |
} | |
println(equal(Array(2,6,6))) |
- NVL in SQL Server - 2023-11-01
- ¿Que es Cake Build? - 2023-02-22
- #How to fix error: MSB4019: The imported project «Microsoft.Data.Tools.Schema.SqlTasks.targets» was not found - 2023-02-20