Wednesday, November 21, 2012

Solución al problema: 185C - Cd and pwd commands [http://codeforces.com] con Java

Solución al problema: 185C - Cd and pwd commands [http://codeforces.com] con Java
El link del Problema se encuentra en el siguiente enlace
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;

/**
 * 185C - Cd and pwd commands [http://codeforces.com]
 * 
 * @author BreakDark
 * @version 1.0 beta
 */
// ACEPTADO!!! xD
public class Main {
    public static void main(String[] args) {
        Scanner Lee; // para leer los datos de entrada
        String linea, salida; // para procesar una linea y la salida
        StringTokenizer LeerLinea; // para leer una linea
        byte n; // numero de instrucciones
        Stack pila = new Stack(); // para los directorios
        Stack pilaAux = new Stack();

        // AQUI INICIA EL PROGRAMA!!!
        Lee = new Scanner(System.in);
        while (Lee.hasNextLine()) {
            n = Byte.parseByte(Lee.nextLine());
            pila.clear(); // vaciamos todo
            while (n-- > 0) {
                linea = Lee.nextLine();
                if (linea.equals("pwd")) {
                    // mostramos el directorio actual
                    salida = "";
                    while (!pila.empty()) {
                        linea = pila.pop();
                        salida = ("/" + linea) + salida;
                        pilaAux.push(linea);
                    }
                    // reponemos la pila
                    while (!pilaAux.empty())
                        pila.push(pilaAux.pop());
                    salida += "/";
                    System.out.println(salida);
                } else {
                    // si es cd
                    linea = linea.substring(3);
                    if (linea.charAt(0) == '/') {
                        // si es el directorio raiz
                        pila.clear();
                        LeerLinea = new StringTokenizer(linea.replace('/', ' '));
                        while (LeerLinea.hasMoreTokens()) {
                            linea = LeerLinea.nextToken();
                            if (linea.charAt(0) == '.') {
                                // si es que hay que retroceder una carpeta
                                pila.pop();
                            } else
                                pila.push(linea);
                        }
                    } else {
                        LeerLinea = new StringTokenizer(linea.replace('/', ' '));
                        while (LeerLinea.hasMoreTokens()) {
                            linea = LeerLinea.nextToken();
                            if (linea.charAt(0) == '.') {
                                // si es que hay que retroceder una carpeta
                                pila.pop();
                            } else
                                pila.push(linea);
                        }
                    }
                }
            }
        }
    }
}

No comments: