Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Mayorga en Noviembre 26, 2019, 10:32:49 AM

Título: Optimizar ejercicio java aceptaelreto Por 3 o más 5
Publicado por: Mayorga en Noviembre 26, 2019, 10:32:49 AM
Hola Buenas,

Hace poco me han propuesto un ejercicio de java que esta subido en la pagina de aceptaElReto. Os dejo el link para que podais ver el enunciado: https://www.aceptaelreto.com/problem/statement.php?id=192&cat=70

He conseguido hacerlo pero tengo un problema de tiempo de ejecución y no se como resolverlo. La ejecución no puede tardar mas de 3 segundos.

Os dejo también mi código a ver si podeis decirme alguna solución para optimizar mi código.


Código (java) [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

private static boolean conseguido = false;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
ArrayList<String> output = new ArrayList<String>();

int caso = sc.nextInt();
ArrayList<Integer> casos = new ArrayList<Integer>();
while(caso!=0) {
casos.add(caso);
caso=sc.nextInt();
}
sc.close();

for(int i = 0; i<casos.size(); i++) {
conseguido = false;
int pivote = casos.get(i);
int num = 1;
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
String out;
if(conseguido) {
out = "SI\n";
}else {
out ="NO\n";
}
output.add(out);
}

for(int i = 0; i<output.size();i++) {
System.out.println(output.get(i));
}



}

public static int comparar(int pivote, int num){
if(num<pivote) {
return 1;
}else if(num == pivote) {
return 0;
}
return -1;
}

public static void sumarCinco(int pivote, int num) {
num += 5;
int resultadoComparar = comparar(pivote,num);

if(resultadoComparar==1 && !conseguido) {
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
}else if(resultadoComparar==0) {
conseguido=true;
}

}

public static void multiplicarTres(int pivote,int num) {
num *= 3;
int resultadoComparar = comparar(pivote,num);

if(resultadoComparar==1 && !conseguido) {
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
}else if(resultadoComparar==0) {
conseguido=true;
}

}
}