[PYTHON] Wettbewerbsfähige Programmierung ab LetCode, die ich nach der Lösung von 150 Fragen in 8 Wochen empfehle

Einführung

Hallo. Konkurriert ihr? Bis vor kurzem habe ich "Competitive Pro Scams" gemacht (lacht).

Obwohl ich an wettbewerbsfähiger Programmierung interessiert bin, bin ich zwei Jahre lang weggelaufen, seit ich eine Ausrede wie "Die Hürde für die Teilnahme am Wettbewerb ist hoch" gefunden habe, und ich habe das Gefühl der Krise, dass "dies mir nicht für immer das Grundwissen der Informatik vermitteln wird". Es war, weil ich anfing, von gedrückt zu werden.

Jetzt ist es im folgenden Zustand.

Dieses Mal habe ich die Wettbewerbsprogrammierung von Grund auf neu gestartet

――Welchen Prozess haben Sie durchlaufen? ――Empfohlene Lernmethode für diejenigen, die von nun an in wettbewerbsfähige Programme einsteigen

Ich möchte hauptsächlich darüber erklären.

TL;DR

Was ist Wettbewerbsprogrammierung?

Es ist ein Wettbewerb, um Probleme mit einem von Ihnen selbst geschriebenen Algorithmus zu lösen.

Beispielsweise werden die folgenden Fragen gestellt.

Es gibt Spiele, die gewinnen, wenn Sie 0 sagen.
Ein Spiel mit zwei Spielern spielen, eine Zahl n zu 1~Wir werden die Anzahl auf 3 reduzieren.
Ich bin immer voraus.
Außerdem werden Sie und Ihr Partner immer ihr Bestes geben.

Zum Beispiel n=Im Fall von 4 ist das Ergebnis wie folgt.
Selbst: 3 (um 1 reduziert)
Gegner: 2,1,0 (um 3 verringern und 0 deklarieren, um zu gewinnen)

Schreiben Sie ein Programm, das bestimmt, ob Sie mit boolean gegen n gewinnen können.

Wettbewerbsfähige Programmierung ist auch gut, weil sie viele Probleme hat, die Sie mit Interesse angehen können.

Unterschied zwischen AtCoder und LeetCode

Persönlich denke ich, dass die Hauptunterschiede zwischen AtCoder und LeetCode wie folgt sind:

AtCoder Datenstruktur, Algorithmus, Mathematik, Denkfähigkeit, Wissen usw. sind ausgewogen erforderlich.

LeetCode Viele spezifische Probleme für Datenstrukturen und Algorithmen

AtCoder ist auf der Haut schwieriger zu fühlen. Da LeetCode auf Datenstrukturen und Algorithmen spezialisiert ist, denke ich, dass Sie, wenn Sie eine bestimmte Anzahl von Problemen lösen, insbesondere einfache Probleme, auch andere Probleme lösen können.

Wenn Sie also mit dem ** Easy-Problem von LetCode beginnen, können Sie in relativ kurzer Zeit die Freude an wettbewerbsfähiger Programmierung erleben. ** **.

Sprachauswahl in der Wettbewerbsprogrammierung

C ++ ist beliebt, aber ich schreibe in Python3. Der Grund ist, dass ** ich Python für geschäftliche Zwecke verwende und es als Sprache mag **.

Python3 ist in der Geschwindigkeit C ++ unterlegen, hat aber auch den Vorteil, dass es in der Lage ist, die Anzahl der Beschreibungen zu reduzieren.

Möglicherweise können Sie das Problem bis zu einem gewissen Grad lösen und in eine andere Sprache wechseln, wenn Sie sich entscheiden, wettbewerbsfähige Programmierung zu beherrschen.

Wettbewerbsfähiger Programmierprozess

Hier ist eine kurze Beschreibung dessen, was während der acht Wochen passiert ist.

Beginnen Sie zu lösen

――Die Beantwortung jeder Frage nimmt viel Zeit in Anspruch

Bis Sie 50 Fragen lösen

Bis Sie 100 Fragen gelöst haben

miteinander ausgehen

In meinem Fall habe ich das Gefühl, dass ** alle 50 Fragen ein kleiner Durchbruch kam **. Dies führte zu ** "Lösung der Anzahl der Probleme", die später beschrieben werden **, und ich war überzeugt.

Wie löst man

Jetzt löse ich das Problem mit der folgenden Lösung.

  1. Verstehen Sie das Problem richtig
  2. Berücksichtigen Sie alle Methoden (3 oder mehr, wenn möglich)
  3. Waschen Sie den Eckkasten aus
  4. Beachten Sie den Zeitaufwand für die Berechnung
  5. Schreiben Sie Code

Ich denke, die obigen Schritte 1, 2, 3, 4 sind wichtig. ** Mit anderen Worten, das Spiel ist vor der Implementierung. ** **.

――Wenn Sie Schritt 1 vernachlässigen, wird aus einem einfachen Problem ein unlösbares Problem (lacht). ――Wenn Sie Schritt 2 vernachlässigen, werden Sie die detaillierte Implementierung weiterhin mit einer Richtlinie umgestalten, die Sie niemals lösen können, und am Ende werden Sie sie nicht häufig lösen können.

Wie man die Leistungsfähigkeit wettbewerbsfähiger Programme verbessert

Ich denke, die folgenden Richtlinien sind wichtig.

  1. Selbst wenn das Problem gelöst ist, werden die Datenstruktur und der Algorithmus nicht vollständig verstanden.
  2. Im Gegenteil, auch wenn Sie es nicht lösen können, sollten Sie darauf zurückblicken, ob es etwas gab, das Sie verstehen konnten **

Diese Idee ist schließlich nicht auf wettbewerbsfähige Programmierung beschränkt. Ich denke, es kann auf jedes Gebiet angewendet werden.

Auf der Grundlage der obigen Ausführungen wird nachfolgend beschrieben, welche Maßnahmen ergriffen werden sollten.

Mach die Anzahl der Probleme

Um die Datenstruktur und die Algorithmen vollständig zu verstehen, ist es wichtig, genau dasselbe Problem zu überprüfen, aber ich denke, es ist wichtig, ** eine große Anzahl von Problemen zu lösen, die aus verschiedenen Blickwinkeln gestellt werden **.

Kennen Sie eine andere Lösung

Wenn Sie das Problem nicht lösen können, sehen Sie die Antwort. Oder Sie könnten darüber nachdenken, es selbst zu lösen, ohne auf die Antwort zu achten. Das Wichtigste dabei ist, den Unterschied zwischen Ihrer eigenen Denkweise und der Denkweise der Antwort zu erkennen.

Wenn Sie das Problem lösen können, ** lesen Sie die verschiedenen Antworten. ** **.

Ich denke, es war sehr effektiv, dies von Anfang an fortzusetzen.

Berühren Sie keine Probleme, die nicht gelöst werden müssen, Probleme, die nicht gelöst werden müssen

** Ersteres ist "ein Problem, das für Ihr aktuelles Niveau zu schwierig ist". ** Was ist das letztere Problem?

Erinnern Sie sich an die folgenden Probleme, die in "Was ist wettbewerbsfähige Programmierung?"

Es gibt Spiele, die gewinnen, wenn Sie 0 sagen.
Ein Spiel mit zwei Spielern spielen, eine Zahl n zu 1~Wir werden die Anzahl auf 3 reduzieren.
Ich bin immer voraus.
Außerdem werden Sie und Ihr Partner immer ihr Bestes geben.

Zum Beispiel n=Im Fall von 4 ist das Ergebnis wie folgt.
Selbst: 3 (um 1 reduziert)
Gegner: 2,1,0 (um 3 verringern und 0 deklarieren, um zu gewinnen)

Schreiben Sie ein Programm, das bestimmt, ob Sie mit boolean gegen n gewinnen können.

Wenn Sie dieses Problem auf eine bestimmte Weise lösen, können Sie es sofort lösen. Wenn Sie dagegen versuchen, es mit einem Algorithmus zu lösen, kann dies zu LTE (Limit Time Exceeded) führen (wie dies bei LeetCode der Fall war).

Wenn ** nur das erstere gelöst werden kann, kann das Problem nicht gelöst werden (obwohl die Idee korrekt ist), und es besteht die Gefahr eines Missverständnisses, dass es nicht korrekt ist. ** **. ** Das ist sehr gefährlich. ** **.

Aus pädagogischer Sicht (obwohl es eine gute Medizin sein kann) scheinen solche Probleme nicht sehr effektiv zu sein. Es ist nicht gut, zu viel Zeit zu verbringen, ohne zu lösen.

Sei dir deiner Gewohnheiten und Schwächen bewusst

Wenn Sie das Problem von Anfang an bis zu einem gewissen Grad lösen können, werden Sie feststellen, in welcher Art von Problem Sie nicht gut sind. Dieses Mal wird die Frage, wie wir das Problem lösen können, zum nächsten Durchbruch führen.

Im Gegenteil, jedes Problem kann nur gelöst werden, indem man weiter darüber nachdenkt, wie man es löst.

** So lösen Sie Schritt 2 Je mehr Sie "jede Methode in Betracht ziehen" können, desto wahrscheinlicher ist es, dass Sie das Problem lösen. Wenn Sie also Ihre eigenen Gewohnheiten und Schwächen reduzieren, wird die Genauigkeitsrate des Problems direkt verbessert. ** **.

Nehmen Sie am Wettbewerb teil, ohne sich um Ihre Noten sorgen zu müssen

Noten sind nur Ergebnisse. Es mag ein extremes Argument sein, dass Profis ausreichen, um Ergebnisse zu erzielen, aber ** Für Anfänger ist "ein Ort, an dem die Ergebnisse der Praxis überprüft werden können" das Wichtigste. ** **.

Ich persönlich denke, wenn Sie "Üben für Üben" fortsetzen, wird Ihre Motivation sinken und es wird nicht zu Ergebnissen führen.

Daher ist das Wichtigste ** "die Produktionschancen zu erhöhen", dh "am Wettbewerb teilzunehmen, ohne sich um die Ergebnisse zu sorgen" ** in der Wettbewerbsprogrammierung.

schließlich

Ich habe diesmal LeetCode empfohlen, aber wenn Sie ** AtCoder lösen können, sollten Sie das Problem mit AtCoder lösen. ** **. Vor allem die Erkenntnis, dass "wettbewerbsfähiges Programmieren Spaß macht" wichtig ist.

Wenn Sie diesen Artikel lesen und mehr Leute alleine mit dem Programmieren beginnen, wären Sie nicht so glücklich. Wir sehen uns im Wettbewerb!

Recommended Posts

Wettbewerbsfähige Programmierung ab LetCode, die ich nach der Lösung von 150 Fragen in 8 Wochen empfehle
Ich habe eine Woche nach Beginn des Programmierens an wettbewerbsorientierten Programmen teilgenommen
Wettbewerbsfähige Programmierung mit Python