Optimizar ejercicio java aceptaelreto Por 3 o más 5

Iniciado por Mayorga, Noviembre 26, 2019, 10:32:49 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 26, 2019, 10:32:49 AM Ultima modificación: Noviembre 29, 2019, 09:28:52 AM por Mayorga
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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
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;
}

}
}