diff --git a/.gitignore b/.gitignore
index e43b0f9..3d957c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
.DS_Store
+*.iml
+.idea/
\ No newline at end of file
diff --git a/Divide and Conquer/README.md b/Divide and Conquer/README.md
new file mode 100644
index 0000000..e06a509
--- /dev/null
+++ b/Divide and Conquer/README.md
@@ -0,0 +1,24 @@
+## Dividir para conquistar
+"Dividir para conquistar" é um princípio fundamental na programação e algoritmos que se baseia na estratégia de resolver um problema **dividindo-o em partes menores**, mais simples e mais gerenciáveis. Esse método permite lidar com problemas complexos de forma mais eficiente, reduzindo a complexidade geral da solução.
+
+Em termos práticos, o "dividir para conquistar" envolve três etapas principais:
+
+### Divisão
+O problema original é dividido em subproblemas menores. Essa divisão pode ser realizada de forma recursiva ou iterativa, dependendo da natureza do problema.
+
+### Conquista
+Cada subproblema é resolvido de forma independente. Isso pode envolver aplicar a mesma estratégia "dividir para conquistar" recursivamente nos subproblemas até que eles se tornem trivialmente resolvíveis.
+
+### Combinação
+As soluções dos subproblemas são combinadas para formar a solução do problema original. Esta etapa garante que a solução para o problema global seja construída corretamente a partir das soluções dos subproblemas.
+
+Segundo o livro `Entendendo Algoritmos, escrito por Aditya Bhargava`, esses passos podem ser divididos em dois:
+1. **Descubra o caso-base** (_caso envolva um array, o caso-base muitas vezes será um array vazio ou um array com apenas um elemento_).
+2. **Você deve chegar o mais perto possível de um array vazio a cada recursão.**
+
+
+### CASOS DE USO
+
+O "dividir para conquistar" é amplamente utilizado em algoritmos eficientes para problemas como ordenação (por exemplo, merge sort, quicksort), busca (por exemplo, binary search), e problemas de divisão e conquista em geral.
+
+Ele não apenas simplifica a abordagem de solução de problemas complexos, mas também pode melhorar significativamente o desempenho do algoritmo quando implementado corretamente, reduzindo a complexidade temporal e espacial em comparação com abordagens mais ingênuas ou lineares.
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/.gitignore b/Divide and Conquer/divide-and-conquer/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/README.md b/Divide and Conquer/divide-and-conquer/README.md
new file mode 100644
index 0000000..4c7f569
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/README.md
@@ -0,0 +1,9 @@
+## Dividir para conquistar
+
+Este projeto contem três exercícios do livro `Entendendo Algoritmos - Aditya Y. Bhargava`. Além disso, também foram implementados testes unitários para análise dos cenários.
+
+### Exercícios
+
+1. Escreva o código pra a função soma, vista anteriormente. (Arquivo: `Exercice1.java`)
+2. Escreva uma função recursiva que conte o número de itens em uma lista. (Arquivo: `Exercice2.java`)
+3. Encontre o valor mais alto em uma lista. (Arquivo: `Exercice3.java`)
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/pom.xml b/Divide and Conquer/divide-and-conquer/pom.xml
new file mode 100644
index 0000000..ad49d6a
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ org.example
+ divide-and-conquer
+ 1.0-SNAPSHOT
+
+
+ 19
+ 19
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice1.java b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice1.java
new file mode 100644
index 0000000..4539037
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice1.java
@@ -0,0 +1,29 @@
+package org.example;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Exercice1 {
+ private static final int FIRST_POSITION_IN_LIST = 0;
+ private static final int SECOND_POSITION_IN_LIST = 1;
+
+ public static void main(String[] args) {
+ List list = Arrays.asList(1, 2, 3, 4);
+ System.out.println("Result: "+ sum(list));
+ }
+
+ public static int sum(List list) {
+ System.out.println("Actual list: " + list);
+
+ if (list.isEmpty()) {
+ return 0;
+ }
+
+ if (list.size() < 2) {
+ return list.get(FIRST_POSITION_IN_LIST);
+ }
+
+ return list.get(FIRST_POSITION_IN_LIST) + sum(list.subList(SECOND_POSITION_IN_LIST, list.size()));
+ }
+}
diff --git a/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice2.java b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice2.java
new file mode 100644
index 0000000..763b9dc
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice2.java
@@ -0,0 +1,25 @@
+package org.example;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class Exercice2 {
+ private static final int SECOND_POSITION_IN_LIST = 1;
+
+ public static void main(String[] args) {
+ List list = Arrays.asList(1, 2, 3, 4);
+ System.out.println("Result: "+ countListSize(list));
+ }
+
+ public static int countListSize(List list) {
+ if (list.isEmpty()) {
+ return 0;
+ }
+
+ if (list.size() < 2) {
+ return 1;
+ }
+
+ return 1 + countListSize(list.subList(SECOND_POSITION_IN_LIST, list.size()));
+ }
+}
diff --git a/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice3.java b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice3.java
new file mode 100644
index 0000000..5dc95fd
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/main/java/org/example/Exercice3.java
@@ -0,0 +1,28 @@
+package org.example;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class Exercice3 {
+ private static final int FIRST_POSITION_IN_LIST = 0;
+ private static final int SECOND_POSITION_IN_LIST = 1;
+
+ public static void main(String[] args) {
+ List list = Arrays.asList(1, 2, 3, 4, 6, 1, 5, 33, 2, 1);
+ System.out.println("Result: "+ getGreatestNumberInList(list));
+ }
+
+ public static int getGreatestNumberInList(List list) {
+ if (list.isEmpty()) {
+ return 0;
+ }
+
+ int firstNumber = list.get(FIRST_POSITION_IN_LIST);
+
+ if (list.size() < 2) {
+ return firstNumber;
+ }
+
+ return Math.max(firstNumber, getGreatestNumberInList(list.subList(SECOND_POSITION_IN_LIST, list.size())));
+ }
+}
diff --git a/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice1Test.java b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice1Test.java
new file mode 100644
index 0000000..75ee6d8
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice1Test.java
@@ -0,0 +1,33 @@
+package org.example;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+public class Exercice1Test {
+
+ @Test
+ public void given_emptyList_should_returnCorrectSum() {
+ List list = new ArrayList<>();
+
+ Assert.assertEquals(0, Exercice1.sum(list));
+ }
+
+ @Test
+ public void given_listWithOneItem_should_returnCorrectSum() {
+ List list = Arrays.asList(3);
+
+ Assert.assertEquals(3, Exercice1.sum(list));
+ }
+
+ @Test
+ public void given_listWithManyItems_should_returnCorrectSum() {
+ List list = Arrays.asList(3, 3, 4, 5, 7, 2);
+
+ Assert.assertEquals(24, Exercice1.sum(list));
+ }
+}
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice2Test.java b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice2Test.java
new file mode 100644
index 0000000..f2e65b8
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice2Test.java
@@ -0,0 +1,31 @@
+package org.example;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Exercice2Test {
+ @Test
+ public void given_emptyList_should_returnCorrectSize() {
+ List list = new ArrayList<>();
+
+ Assert.assertEquals(list.size(), Exercice2.countListSize(list));
+ }
+
+ @Test
+ public void given_listWithOneItem_should_returnCorrectSize() {
+ List list = Arrays.asList(3);
+
+ Assert.assertEquals(list.size(), Exercice2.countListSize(list));
+ }
+
+ @Test
+ public void given_listWithManyItems_should_returnCorrectSize() {
+ List list = Arrays.asList(3, 3, 4, 5, 7, 2);
+
+ Assert.assertEquals(list.size(), Exercice2.countListSize(list));
+ }
+}
\ No newline at end of file
diff --git a/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice3Test.java b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice3Test.java
new file mode 100644
index 0000000..700e3d2
--- /dev/null
+++ b/Divide and Conquer/divide-and-conquer/src/test/java/org/example/Exercice3Test.java
@@ -0,0 +1,32 @@
+package org.example;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Exercice3Test {
+ @Test
+ public void given_emptyList_should_returnGreatestItem() {
+ List list = new ArrayList<>();
+
+ Assert.assertEquals(0, Exercice3.getGreatestNumberInList(list));
+ }
+
+ @Test
+ public void given_listWithOneItem_should_returnGreatestItem() {
+ List list = Arrays.asList(3);
+
+ Assert.assertEquals(3, Exercice3.getGreatestNumberInList(list));
+ }
+
+ @Test
+ public void given_listWithManyItems_should_rreturnGreatestItem() {
+ List list = Arrays.asList(3, 3, 4, 5, 7, 2, 88, 1, 4, 6, 7, 10, 81);
+
+ Assert.assertEquals(88, Exercice3.getGreatestNumberInList(list));
+ }
+
+}
\ No newline at end of file