Problema
Problema 5 (Nivel Basico Concurso de Programación CUVALLES 2024B)
Palabras Cortas (Autor: Jorge Ernesto Castillo Rizo)
Escribe un programa que identifique y cuente las palabras de 3 caracteres o menos en un texto dado (S) por el usuario. Ignora mayúsculas, minúsculas y signos de puntuación, y devuelve la cantidad total de palabras cortas encontradas.
Nota: Todos los caracteres en S denotan valores de la Aa - Zz.
Entrada: Una línea de texto.
Salida: Un número que representa la cantidad total de palabras con 3 caracteres o menos.
Ejemplo:
Entrada:
El sol se oculta en el horizonte, y la noche llega.
Salida:
7
Explicación de la Solución
1. Comprender el Problema
El objetivo es contar cuántas palabras dentro de una frase tienen 3 caracteres o menos.
- Entrada: Un texto con palabras separadas por espacios.
- Salida: Un número que representa la cantidad de palabras cortas.
- Restricciones: No se deben considerar signos de puntuación y las mayúsculas/minúsculas no afectan el conteo.
Ejemplo:
Entrada: "El sol se oculta en el horizonte, y la noche llega."
Salida: 7
2. Identificar los Pasos para Resolverlo
Para llegar a la solución, descomponemos el problema en pasos más pequeños:
- Eliminar los signos de puntuación → Porque el problema indica que deben ignorarse.
- Dividir el texto en palabras → Para analizar una por una.
- Contar cuántas palabras tienen 3 caracteres o menos → Usamos un contador.
- Imprimir el resultado → Mostramos la cantidad total de palabras cortas.
3. Diseño de la Solución (Paso a Paso)
1️⃣ Preprocesar el texto:
- Eliminar signos de puntuación.
- No es necesario convertir a minúsculas porque no afecta el conteo.
2️⃣ Dividir la frase en palabras:
- Usamos el espacio como separador.
3️⃣ Recorrer cada palabra y contar las que cumplan la condición:
- Si una palabra tiene 3 caracteres o menos, sumamos 1 al contador.
4️⃣ Mostrar el resultado final:
- Imprimir el valor del contador.
📝 Código en Python
# Define una función llamada solution que recibe una lista de palabras
def solution(words):
# Inicializa un contador en 0
c = 0
# Itera sobre cada palabra en la lista de palabras
for word in words:
# Limpia la palabra: crea una nueva cadena solo con caracteres alfanuméricos
# join: une todos los caracteres que cumplen la condición isalnum()
clean_word = ''.join(char for char in word if char.isalnum())
# Verifica si la palabra limpia tiene 3 o menos caracteres y no está vacía
if len(clean_word) <= 3 and clean_word:
# Incrementa el contador si se cumple la condición
c += 1
# Devuelve el total de palabras que cumplen con el criterio
return c
# Lee una línea de entrada y la divide en palabras
words = input().split()
# Imprime el resultado de llamar a la función solution con las palabras
print(solution(words))
💡 Complejidad del Algoritmo
La solución tiene una complejidad de O(n), donde n
es el número de palabras en la frase. Esto se debe a que:
- La limpieza del texto es O(m), donde
m
es el tamaño del string. - La división en palabras es O(n).
- El recorrido de la lista de palabras y el conteo es O(n).
- En total, la solución sigue una complejidad lineal O(n + m), lo cual es eficiente para este problema.
Top comments (0)