# 30 Days of Code — Complete Guide W/Resources(DSA)

Want to become a successful software engineer/developer in 2021 and you are dreaming about getting into big tech giant companies?

Or are you a student who wants to develop your coding skills and tackle coding competitions but do not know where to start from or not been able to form a habit of coding, then this for you!!!

Many times I have seen students crying and complaining that they are unable to maintain consistency to code or solve coding problems. As days pass the excitement and enthusiasm fades away**😔**.

But, as said it requires **21 days** to acquire a habit and **90 days** for making it a part of your life. Same goes on for Problem Solving and Competitive Coding thus develop interest in coding and solve real-life problems.

Dedicating a 3–4 week time now in competitive coding will take you ahead of other for sure. These **#30daysofcoding** will surely helps you in cracking interview of top tech companies like Amazon, Flipkart, Facebook, Google, etc.

**Solution**✔️

So here I have prepared a practical roadmap **“30 days of Code” **based on a lot of resources and by watching a lot of videos and various articles from GeeksforGeeks and LeetCode as well as Code Forces.

I know these daily can become tough at some point of time but do not lose hope and remember that — **“Climb mountains**🏔️** not so the world can see you, but so you can see the world**🌎**”**

**Alternative Way**⛕

If you are bored of following this, or are already a good enough coder, the best way is follow the below two programs i.e. of **GeeksforGeeks **and **LeetCode**. These are free coding challenges which are available daily to everyone. Link are below:**GeeksforGeeks****LeetCode**

These things will help you grow a habit of coding for a lifetime as thus you can become confident for cracking the interviews of big tech companies.

**Things to Remember(Prerequisites)**🤔

- You should primarily select a coding language whichever you are comfortable in for e.g.
**Java, Python or C++**. Take your time. - Also go through the time-complexities of various algorithms.
- If you’re a beginner then try to commit your time for at least
**4–6 hours**every day. If you’re an experienced one then you need to commit for**2–3 hours**every day. - These topics only cover the basics and if needed you may need to get some extra knowledge by reading and watching videos for solving problems.
- Do not directly jump to the solution.

I suggest “**Make your own notes**✍️”.

**Lets get started**🤩**.**

# Day 1 and Day 2(Math's & Programming Language)

So to solve any type of Coding problems, you should know the basic Mathematics🧮 and for the first 2 days, I would recommend you to brush -up your math skills.

If you are already aware of the basic math concepts you should spend this time to select your own Programming Language.

I am hereby giving some of the most relevant topics of math that you can go through:

**Mathematics :**

Set Operations

Groups

Power Sets

Relations

**Resources to choose language:**

C Programming

C++ Programming

Java Programming

Python

**Day 3 and Day 4(Arrays)**

The most basic and fundamental problems are of Arrays which are linear data structures. If you feel confident in solving the easy ones, try the medium and hard level problems.

Array Rotation

Find duplicates in an array

Missing number in an array

Merge Two Sorted Arrays

Subarray with given sum

**Day 5 and Day 6(Matrix)**

Usually anyone would suggest you to go for Linked Lists after learning arrays, but matrices really play an important role in dynamic programming.

Rotate matrix elements

Matrix Multiplication

Magic Square

Square of Matrix Diagonal Elements

# Day 6 to Day 9(Strings🧵)

Taking these 3 days solely for strings will definitely help you in String Manipulations i.e. you can do string changing, parsing, splicing, pasting, or analyzing strings.

Word Count in Strings

Count Distinct Subsequences

Sparse Search

K’th Non-repeating Character

Anagram Substring Search

Let me tell you this, String Manipulations is a huge chapter to be studied, but if your basic concepts are clear, then it would just be an “Icing on Cake🍰!!!”

**Day 10 and Day 11(Searching & Sorting)**

Searching and Sorting play an important role in most of the coding problems where you need to find a specific value. Usually most of the languages like Java, Python have their inbuilt functions to Search and Sort a specific value.

Searching Algorithms

Sorting Algorithms

Two Pointers

# Day 12 and Day 13(Bit Magic & Recursion)

Just like string manipulation, Bit Manipulations will help you to determine one or more bit patterns or bit numerals thus improve the efficiency of the algorithms.

**Bit magic :**

Sum of Bitwise XOR

Least Significant K bit

Same weight integer

**Recursion :**Towers of Hanoi (TOH)

Inorder/Preorder/Postorder Tree Traversals

DFS of Graph

Tail Recursion

# Day 14 and Day 15(Linked Lists)

Just like Arrays, Linked Lists stand out very important in Competitive Coding as they will be crucial in helping implementations of stack and queues as well as in graphs further more.

Linked lists come in handy when the data entries are huge which arrays cant handle on their own.

Middle element of LL

Merge two LL

Rotate Doubly LL by N nodes

Josephus Circle

Binary Tree to Circular Doubly LL

# Half way Reached(Hushhhh…)

**Congratulations**🥳🎉. So if you have completed so far, you have already reached half way through the course and will be able to solve almost of the Data Structure and Algorithms Problems.

You, by now should have completed almost **90–100 problems** within the span of **15 days**. Now, also depending upon the speed, you can increase the speed of solving of questions.

Here comes the wave of Most Important Topics!!!

From now on, lets concentrate them🥺.

**Day 16 to Day 18(Stack)**

I guess, this is the most important step, studying Stacks will overall help you in most of the data structures like operations in queues using stacks, queues using stacks, infix and postfix operations, etc. Let me give you some extra tips.

**Basic Examples:**

Queue using Stacks

Prefix to Infix Conversion

Prefix to Postfix Conversion

Postfix to Prefix Conversion

Expression Evaluation

**Operations on Stack:**Reverse a stack using recursion

Delete middle element of a stack

Balanced expression with replacement

Bubble sort using two Stacks

The applications of stack are huge, so I would suggest you focus on it and try to master it as further data structure is based on same concept.

# Day 19(Queues)

If you have studied stacks well, then queues will just be other day in your boring life, just the opposite of stack you may say!!!

Reversing the first K elements of a Queue

Priority Queue using Linked List

Implement Stack and Queue using Deque

Reverse a path in BST using queue

ZigZag Tree Traversal

Congratulations🥳🎉. You have made this far. After completion of all these DSA concepts you will be almost **60%** prepared for the interview stages.

# Day 20 and Day 21(Tree🌲)

The hierarchy of natural forms is maintained with the help of trees. There are further various combinations available for tree data structure such as AVL trees, Red-black trees, Self-balancing tree, etc.

But as I say, if the basic concepts of any data structure are clear in your mind, then you can deal with any sort of data structure. I would recommend you to watch videos regarding tree to know them in detail, if they become hard for you in understanding.

Inorder Tree Traversal without Recursion

Inorder Successor of a node in Binary Tree

Reverse tree path

Morris traversal for Preorder

Check if a given Binary Tree is SumTree

Check if two nodes are cousins in a Binary Tree

# Day 22(BST)

If you are good at solving tree problems, then BST will be cherry🍒 on the top. This will probably take you less number of hours to understand the concepts and once you did it, you will be thorough with all the concepts of Trees🌳.

Sorted Linked List to Balanced BST

Convert BST to Min Heap

Merge two BSTs with limited extra space

Lowest Common Ancestor in a Binary Search Tree

A program to check if a binary tree is BST or not

Second largest element in BST

Sum of k smallest elements in BST

# Crucial Days(OMG!!!)

The next few days are very crucial as the last remaining topics are been asked by most of the **#FAANG** companies or lets says the where the package is above 12–15lpa.

So, I would suggest you to solve as many problems as possible for these remaining topics. These remaining topics will be very important and once you conquer these topics, cracking products based companies would come handy!!!

# Day 23 and Day 24(Heap)

The heap is a tree based data structure and generally will be of two types such as **Minimum Heap** and **Maximum Heap**.

The heap data structure has various applications in **Prim’s Algorithm** and Dijkstra’s Algorithm. Priority Queues can be implemented efficiently using the Heap data structure.

Leaf starting point in a Binary Heap data structure

Maximum difference between two subsets of m elements

Maximum distinct elements after removing k elements

K maximum sum combinations from two arrays

Convert min Heap to max Heap

Sort a nearly sorted (or K sorted) array

# Day 25 and Day 26(Graphs)

After heap, the concepts comes for Graphs and Topological Sorting which are the non-linear data structure. Graphs can be used to solve real-life word problems such as Shortest path between two cities, N-Queens Problem or even M-coloring Graph Problems.

**Topological Sorting:**Longest path between any pair of vertices

Longest Path in a Directed Acyclic Graph

Kahn’s Algorithm for Topological Sorting

**Basic Graph Problems:**Transpose graph

Count number of trees in a forest

Print all paths from a given source to a destination using BFS

Minimum edge reversals to make a root

A matrix probability question

**Complex Graph Problems:**Detect Cycle in a Directed Graph

Tug of War

n-Queen’s Problem

m Coloring Problem

Hamiltonian Cycle

Bellman–Ford Algorithm

Floyd Warshall Algorithm

Dial’s Algorithm

Dijkstra’s shortest path algorithm

Rat in a Maze

The Knight-Tour Problem

# Day 27 and Day 28(Greedy Algorithms)

Image

When you want to built a solution piece by piece, and always choosing the next piece that offers the most obvious and immediate benefit is then called as Greedy Algorithms. They are been used in Operating Systems and NP Complete Problems as well as Job Selection Problems.

**Basic Greedy Algorithms:**Huffman Coding

Job Sequencing Problem

Water Connection Problem

Policemen catch thieves

Minimum Swaps for Bracket Balancing

Fitting Shelves Problem

**Complex Greedy Algorithms:**Kruskal’s Minimum Spanning Tree

Prim’s Minimum Spanning Tree

Dijkastra’s Shortest Path Algorithm

Dial’s Algorithm

Graph Coloring

K-centers problem

Shortest superstring problem

# Day 29 and Day 30(Dynamic Programming)

We can merely say that we have reached the end of the #30DaysOfCoding and the last topic and the most fantastic topic that we will cover here is the Dynamic Programming topic. It can be said as an optimization over recursion. The recursive calls for same inputs can thus be called as Dynamic Programming.

Firstly I would suggest you to again go through the topic of Recursion and then get your hands on with this. Various problems that thus be optimized with the help of Dynamic Programming.

**Basic DP Problems:**Fibonacci numbers

nth Catalan Number

Compute nCr % p

Print Fibonacci Series in reverse order

Longest Common Subsequence

Longest Repeated Subsequence

Minimum Sum Path in a Triangle

**Intermediate DP Problems:**Floyd Warshall Algorithm

Bellman–Ford Algorithm

0–1 Knapsack Problem

Egg Dropping Puzzle

Dice Throw Problem

Word Break Problem

Vertex Cover Problem

Tile Stacking Problem

Box-Stacking Problem

**Complex DP Problems:**Palindrome Partitioning

Word Wrap Problem

Matrix Chain Multiplication

Maximum sum bitonic subarray

Maximum sum rectangle in a 2D matrix

Number of subsequences in a string divisible by n

Printing Shortest Common Supersequence

*Extra*

Here’s a list of **Top 20 Dynamic Programming Interview Questions**

The above mentioned topics will surely help you out to validate and also help you gain more in-depth knowledge for Data Structures and Algorithms. If you are able to solve the example problems that I have given in the topics, it they will surely boost your confidence and will help you in your upcoming technical interviews.

**And who knows, if lucky you may also get the same problems that you have already solved in 30 Days of Coding Challenge.**

Hope all of this helps!!!

**Resources:**

GeeksforGeeks

Google

I also do try to make some amazing content on **YouTube**, so I would suggest you can check that out too. Also make sure you follow me on **Twitter**.

Also you can check out my another blog on #100DaysOfCoding.

Link below:

https://omkarghotekar.medium.com/100-days-of-code-complete-guide-w-resources-beginner-aae12a8af926