[PYTHON] Programmation compétitive commençant par LetCode, que je recommande après avoir résolu 150 questions en 8 semaines

introduction

Bonjour. Êtes-vous en compétition les gars? Jusqu'à récemment, je faisais des «escroqueries professionnelles compétitives» (rires).

Bien que je sois intéressé par la programmation compétitive, cela fait deux ans que j'ai trouvé une excuse telle que «l'obstacle pour participer au concours est élevé» et je m'enfuis depuis deux ans. C'est parce que j'ai commencé à être pressé.

Maintenant, il est dans l'état suivant.

Cette fois, j'ai commencé la programmation de concours à partir de zéro

―― Quel genre de processus avez-vous traversé? ――Méthode d'apprentissage recommandée pour ceux qui entreront désormais dans la programmation compétitive

Je voudrais expliquer principalement sur.

TL;DR --Recommandé pour résoudre le problème facile de LeetCode

Qu'est-ce que la programmation de concours?

C'est un concours pour résoudre des problèmes avec un algorithme écrit par vous-même.

Par exemple, les questions suivantes seront posées.

Il y a des jeux qui gagnent si vous dites 0.
Jouer à un jeu à deux joueurs, un nombre n à 1~Nous réduirons le nombre à 3.
Je suis toujours en avance.
De plus, vous et votre partenaire ferez toujours de leur mieux.

Par exemple n=Dans le cas de 4, le résultat est le suivant.
Soi: 3 (réduit de 1)
Adversaire: 2,1,0 (diminuer de 3 et déclarer 0 pour gagner)

Écrivez un programme qui détermine si vous pouvez gagner contre n avec un booléen.

La programmation compétitive est également bonne car elle présente de nombreux problèmes que vous pouvez résoudre avec intérêt.

Différence entre AtCoder et LeetCode

Personnellement, je pense que les principales différences entre AtCoder et LeetCode sont les suivantes:

AtCoder La structure des données, l'algorithme, les mathématiques, la capacité de réflexion, les connaissances, etc. sont nécessaires de manière équilibrée.

LeetCode De nombreux problèmes spécifiques aux structures de données et aux algorithmes

AtCoder est plus difficile à ressentir sur la peau. LeetCode étant spécialisé dans les structures de données et les algorithmes, je pense que si vous résolvez un certain nombre de problèmes, en particulier les problèmes Easy, vous pourrez également résoudre d'autres problèmes.

Par conséquent, si vous commencez avec le ** problème facile de LetCode, vous pouvez réaliser le plaisir de la programmation compétitive en un temps relativement court. ** **

Sélection de la langue dans la programmation compétitive

C ++ est populaire, mais j'écris en Python3. La raison en est que ** j'utilise Python pour les affaires et je l'aime en tant que langage **.

Python3 est inférieur au C ++ en vitesse, mais il a aussi l'avantage de pouvoir ** réduire la quantité de description **.

Vous pourrez peut-être résoudre le problème dans une certaine mesure et passer à une autre langue lorsque vous décidez de maîtriser la programmation compétitive.

Processus de programmation compétitif

Voici une brève description de ce qui s'est passé au cours des huit semaines.

Commencer à résoudre

――Il faut beaucoup de temps pour résoudre chaque question

Jusqu'à ce que vous résolviez 50 questions

Jusqu'à ce que vous résolviez 100 questions

――Vous pouvez résoudre des problèmes résolubles, mais vous ne pouvez pas résoudre des problèmes insolubles, peu importe ce que vous pensez

à ce jour

Dans mon cas, j'estime que ** toutes les 50 questions représentaient une petite avancée **. Cela a conduit à ** "résoudre le nombre de problèmes" décrits plus loin **, et j'en ai été convaincu.

Comment résoudre

Maintenant, je résous le problème avec la solution suivante.

  1. Comprenez correctement le problème
  2. Considérez toutes les méthodes (3 ou plus si possible)
  3. Lavez le boîtier d'angle
  4. Soyez conscient du temps de calcul
  5. Écrivez le code

Je pense que les étapes 1, 2, 3, 4 ci-dessus sont importantes. ** En d'autres termes, le jeu est avant la mise en œuvre. ** **

――Si vous négligez l'étape 1, un problème simple se transformera en un problème insoluble (rires). ――Si vous négligez l'étape 2, vous continuerez à refactoriser l'implémentation détaillée avec une politique que vous ne pourrez jamais résoudre, et à la fin vous ne pourrez pas la résoudre fréquemment. --Si vous négligez l'étape 3, le nombre de WA (mauvaise réponse) augmentera. --Si l'étape 4 est négligée, le nombre de LTE (Limit Time Exceeded) augmentera.

Comment améliorer la puissance de la programmation compétitive

Je pense que les lignes directrices suivantes sont importantes.

  1. Même si le problème est résolu, la structure des données et l'algorithme ne sont pas ** complètement compris, **
  2. Au contraire, même si vous ne pouvez pas le résoudre, assurez-vous de regarder en arrière pour savoir s'il y avait quelque chose que vous pouviez comprendre **

Cette idée ne se limite pas, après tout, à une programmation concurrentielle. Je pense que cela peut s'appliquer à n'importe quel domaine.

Sur la base de ce qui précède, le type d'action à entreprendre est décrit ci-dessous.

Faites le nombre de problèmes

Pour bien comprendre la structure des données et les algorithmes, il est important de revoir exactement le même problème, mais je pense qu'il est important de ** résoudre un grand nombre de problèmes qui sont posés sous différents angles **.

Connaître une solution différente

Si vous ne pouvez pas résoudre le problème, vous verrez la réponse. Ou vous pourriez penser à le résoudre vous-même sans regarder la réponse. L'important ici est de ** reconnaître la différence entre votre propre façon de penser et la façon de penser de la réponse **.

Si vous pouvez résoudre le problème, ** lisez les différentes réponses. ** **

Je pense que c'était très efficace de continuer cela depuis le début.

Ne touchez pas aux problèmes qui n'ont pas besoin d'être résolus, les problèmes qui n'ont pas besoin d'être résolus

** Le premier est "un problème trop difficile pour votre niveau actuel". ** Alors, quel est ce dernier problème?

Vous souvenez-vous des problèmes suivants présentés dans «Qu'est-ce qu'une programmation concurrentielle?»

Il y a des jeux qui gagnent si vous dites 0.
Jouer à un jeu à deux joueurs, un nombre n à 1~Nous réduirons le nombre à 3.
Je suis toujours en avance.
De plus, vous et votre partenaire ferez toujours de leur mieux.

Par exemple n=Dans le cas de 4, le résultat est le suivant.
Soi: 3 (réduit de 1)
Adversaire: 2,1,0 (diminuer de 3 et déclarer 0 pour gagner)

Écrivez un programme qui détermine si vous pouvez gagner contre n avec un booléen.

Si vous résolvez ce problème d'une certaine manière, vous pouvez le résoudre en un instant. Inversement, si vous essayez de le résoudre avec un algorithme, cela peut entraîner LTE (Limit Time Exceeded) (comme ce fut le cas avec LeetCode).

Si ** seul le premier peut être résolu, le problème ne peut pas être résolu (bien que l'idée soit correcte) et il y a un risque de malentendu sur le fait qu'il n'est pas correct. ** ** ** C'est très dangereux. ** **

D'un point de vue pédagogique (bien que cela puisse être un bon médicament), ces problèmes ne semblent pas très efficaces. Il n'est pas bon de passer trop de temps sans résoudre.

Soyez conscient de vos habitudes et de vos faiblesses

Si vous pouvez résoudre le problème dans une certaine mesure dès le stade initial, vous verrez le type de problème pour lequel vous n'êtes pas doué. Cette fois, comment nous pouvons résoudre le problème mènera à la prochaine percée.

Au contraire, tout problème ne peut être résolu qu'en continuant à réfléchir à la manière de le résoudre.

** Comment résoudre Étape 2 Plus vous pouvez «considérer chaque méthode», plus vous avez de chances de résoudre le problème, donc réduire vos propres habitudes et faiblesses améliorera directement le taux de précision du problème. ** **

Participez au concours sans vous soucier de vos notes

Les notes ne sont que des résultats. C'est peut-être un argument extrême que les professionnels suffisent à rechercher des résultats, mais ** Pour les débutants, "un endroit pour vérifier les résultats de la pratique" est la chose la plus importante. ** **

Je pense personnellement que si vous continuez à "pratiquer pour pratiquer", votre motivation diminuera et cela ne donnera pas de résultats.

Par conséquent, le plus important est ** «d'augmenter les chances de production», c'est-à-dire «de participer au concours sans se soucier des résultats» en programmation compétitive **.

à la fin

J'ai recommandé LeetCode cette fois, mais si vous pouvez résoudre ** AtCoder, vous devriez résoudre le problème avec AtCoder. ** ** Par-dessus tout, il est important de se rendre compte que «jouer à des programmes compétitifs est amusant».

Si vous lisez cet article et que plus de gens commencent seuls la programmation compétitive, vous ne seriez pas si heureux. Rendez-vous au concours!

Recommended Posts

Programmation compétitive commençant par LetCode, que je recommande après avoir résolu 150 questions en 8 semaines
J'ai participé à une programmation compétitive une semaine après avoir commencé la programmation
Programmation compétitive avec python