Bom dia, iniciante, tudo bem?
Para resolução de problemas é necessário que você:
- Identifique o problema;
- Decomponha o problema;
- Reconheça o problema;
- Crie um algoritmo para resolução do problema;
Para você conseguir melhorar isso o que é necessário: PRÁTICA.
A prática é importante, pois com uma prática de um conceito, é possível que você reconheça um problema similar. Além disso, é possível que ao longo do tempo, identifique as variações que ele pode vir a sofrer.
Por outro lado, caso você esteja estudando por materias didáticos, ou por aula didática, tome cuidado. Estudos mostram que o exercício possuem benefícios melhores que apenas a assimilação de um conteúdo de teor expositório. Você pode ver um conteúdo a respeito nesse link: https://degraucultural.com.br/noticia/estudo-ativo-x-estudo-passivo-qual-e-mais-eficaz#:~:text=Mas%20existem%20duas%20formas%20de,%C3%A9%20quanto%20tem%20uma%20a%C3%A7%C3%A3o.
Um trecho do conteúdo do site:"a ideia básica é que o aprendizado é menor quando apenas lemos, ouvimos ou observamos algo, do que quando discutimos o conteúdo ou o ensinamos a outras pessoas, ou seja, quando damos alguma utilidade a ele. Ao praticar o estudo ativo, o aluno bota em prática o que aprendeu em aula, ativando outras áreas do cérebro e enviando a este órgão uma mensagem de que aquele assunto deve ser armazenado na memória de longa duração, responsável por guardar o que consideramos importante.".
Desse modo, o estudo da lógica de programação deve ser baseada no exercício, não fique preso a teoria. É claro que a teoria é extremamente importante, já que com ela você consegue entender todo o funcionamento do algoritmo e pegar a base.
Alguns sites que podem te auxiliar nessa jornada:
https://www.hackerrank.com/
https://www.codewars.com/
https://leetcode.com/
Esses são os mais famosos, e que particularmente, grande parte dos programadores fazem referência e elogiam.