diff --git a/README.md b/README.md
index 1bee39036..1100f949c 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,34 @@
+## π κΈ°λ₯ λͺ©λ‘
+<μ«μ μμ±>
+1. μ«μ λλ€ μμ±(1~9 λ²μμ 3μ리 μμ°μ)
+2. κ° μ리 μ«μλ μ€λ³΅ νμ© XX
+
+<μ
λ ₯>
+1.[μμΈ] μ«μκ° μλ κ°μ μ
λ ₯λ°μ κ²½μ°
+2.[μμΈ] 3μ리 μμ°μ μλ κ²½μ°
+3.[μμΈ] κ° μλ¦Ώμμ μ«μμ€ μ€λ³΅λ κ°μ΄ μλ κ²½μ°
+4. [μμΈ] 0 μ΄ν μμμΈ κ²½μ°
+5. [μμΈ] IllegalArgumentException λ°μ μν¨ ν μ’
λ£
+
+<ννΈ>
+1. κ°μ μλ¦Ώμμ μ«μ μΌμΉ : μ€νΈλΌμ΄ν¬
+2. λ€λ₯Έ μλ¦Ώμμ μ«μ μΌμΉ : λ³Ό
+3. λ€λ₯Έ μλ¦Ώμμ λ€λ₯Έ μ : λ«μ±
+
+<μΆλ ₯>
+1. λ³Ό, μ€νΈλΌμ΄ν¬ μΉ΄μ΄νΈ ν μΆλ ₯
+2. μΆλ ₯ μμ: nλ³Ό mμ€νΈλΌμ΄ν¬
+3. m=3μΌ λ(3 μ€νΈλΌμ΄ν¬) κ²μ μ’
λ£ λ¬Έκ΅¬ μΆλ ₯
+
+<μ’
λ£μ‘°κ±΄>
+1. μ¬μμ - μ«μ λλ€ μμ± λ©μλ νΈμΆλΆλΆμΌλ‘ λμκ°
+2. μ
λ ₯ μ’
λ£ - κ²μ μ’
λ£!
+
+
+
## βπ» μ
μΆλ ₯ μꡬμ¬ν
### β¨οΈ μ
λ ₯
diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java
index 7f1901b8b..60b9e636c 100644
--- a/src/main/java/baseball/Application.java
+++ b/src/main/java/baseball/Application.java
@@ -1,7 +1,31 @@
package baseball;
+import java.util.List;
+
+import service.ComputerRandomNum;
+import service.JudgeResult;
+import util.InputUtil;
+
public class Application {
- public static void main(String[] args) {
- //TODO: μ«μ μΌκ΅¬ κ²μ ꡬν
- }
+ public static void main(String[] args) {
+ //TODO: μ«μ μΌκ΅¬ κ²μ ꡬν
+ ComputerRandomNum clearNumber = new ComputerRandomNum();
+ InputUtil inputUtil = new InputUtil();
+ JudgeResult judge = new JudgeResult();
+
+ boolean again = true;
+
+ while (again){
+ List computer = clearNumber.getComputerNumber();
+ String result = "";
+ while (!result.equals("3μ€νΈλΌμ΄ν¬")){
+ result = judge.judgement(computer, inputUtil.userNumber());
+ System.out.println(result);
+ }
+ System.out.println("3κ°μ μ«μλ₯Ό λͺ¨λ λ§νμ
¨μ΅λλ€! κ²μ μ’
λ£");
+ again = inputUtil.replay();
+ }
+ }
+
+
}
diff --git a/src/main/java/service/CompareNum.java b/src/main/java/service/CompareNum.java
new file mode 100644
index 000000000..e71f98687
--- /dev/null
+++ b/src/main/java/service/CompareNum.java
@@ -0,0 +1,26 @@
+package service;
+
+import java.util.List;
+
+public class CompareNum {
+ public int countBall(List computer, List user){
+ int result = 0;
+ for(int i = 0; i < user.size(); i++){
+ if(computer.contains(user.get(i))){
+ result += 1;
+ }
+ }
+ return result;
+ }
+
+ public int countStrike(List computer, List user){
+ int strike = 0;
+ for(int i = 0; i < user.size(); i++){
+ if(computer.get(i) == user.get(i)){
+ strike += 1;
+ }
+ }
+ return strike;
+ }
+
+}
diff --git a/src/main/java/service/ComputerRandomNum.java b/src/main/java/service/ComputerRandomNum.java
new file mode 100644
index 000000000..33bf3ef21
--- /dev/null
+++ b/src/main/java/service/ComputerRandomNum.java
@@ -0,0 +1,35 @@
+package service;
+
+import java.util.List;
+import java.util.ArrayList;
+import camp.nextstep.edu.missionutils.Randoms;
+
+public class ComputerRandomNum {
+
+ private List computerNumber;
+
+ public ComputerRandomNum() {
+ computerNumber = setGameNumber();
+ }
+
+ public List getComputerNumber() {
+ return computerNumber;
+ }
+ public static int getComputerNum() {
+ return Randoms.pickNumberInRange(1, 9);
+ }
+
+ public List setGameNumber() {
+ List computerNumber = new ArrayList<>();
+ while (computerNumber.size() < 3) {
+ int randomNumber = getComputerNum();
+ if(computerNumber.contains(randomNumber)){
+ continue;
+ }else {
+ computerNumber.add(randomNumber);
+ }
+ }
+ return computerNumber;
+ }
+
+}
diff --git a/src/main/java/service/JudgeResult.java b/src/main/java/service/JudgeResult.java
new file mode 100644
index 000000000..7a09c84da
--- /dev/null
+++ b/src/main/java/service/JudgeResult.java
@@ -0,0 +1,27 @@
+package service;
+
+import java.util.List;
+
+public class JudgeResult {
+
+ CompareNum compare = new CompareNum();
+
+ public String judgement(List computer, List player){
+ int total = compare.countBall(computer, player);
+ int strike = compare.countStrike(computer, player);
+ int ball = total - strike;
+
+ String result = null;
+
+ if(total == 0){
+ result = "λ«μ±";
+ }else if(ball != 0 && strike == 0){
+ result = ball + "λ³Ό";
+ }else if(strike != 0 && ball == 0){
+ result = strike + "μ€νΈλΌμ΄ν¬";
+ }else {
+ result = ball + "λ³Ό " + strike + "μ€νΈλΌμ΄ν¬";
+ }
+ return result;
+ }
+}
diff --git a/src/main/java/util/InputException.java b/src/main/java/util/InputException.java
new file mode 100644
index 000000000..10427ff6c
--- /dev/null
+++ b/src/main/java/util/InputException.java
@@ -0,0 +1,50 @@
+package util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class InputException {
+ private String inputNumber;
+
+ public InputException(String inputNumber) {
+
+ isStringLengthCorrect(inputNumber);
+ isDigitPlayerNumber(inputNumber);
+ isDifferentPlayerNumber(inputNumber);
+
+ this.inputNumber = inputNumber;
+ }
+
+ public String getInputNumber() {
+ return inputNumber;
+ }
+
+ public static void isStringLengthCorrect(String word) throws IllegalArgumentException {
+ if (word.length() != 3) {
+ throw new IllegalArgumentException("μλͺ»λ κ°μ μ
λ ₯νμ
¨μ΅λλ€. ");
+ }
+ }
+
+
+ public static void isDifferentPlayerNumber(String word) throws IllegalArgumentException {
+ Set set = new HashSet<>();
+
+ for (int i = 0; i < word.length(); i++) {
+ set.add(word.charAt(i));
+ }
+ if (set.size() != word.length()) {
+ throw new IllegalArgumentException("μλͺ»λ κ°μ μ
λ ₯νμ
¨μ΅λλ€.");
+ }
+ }
+ public static void isDigitPlayerNumber(String word) {
+ for (int i = 0; i < word.length(); i++) {
+ isDigitCharInString(word, i);
+ }
+ }
+
+ public static void isDigitCharInString(String word, int index) throws IllegalArgumentException {
+ if (!Character.isDigit(word.charAt(index))) {
+ throw new IllegalArgumentException("μλͺ»λ κ°μ μ
λ ₯νμ
¨μ΅λλ€.");
+ }
+ }
+}
diff --git a/src/main/java/util/InputUtil.java b/src/main/java/util/InputUtil.java
new file mode 100644
index 000000000..0a10eba7c
--- /dev/null
+++ b/src/main/java/util/InputUtil.java
@@ -0,0 +1,31 @@
+package util;
+
+import java.util.List;
+import java.util.ArrayList;
+import camp.nextstep.edu.missionutils.Console;
+
+public class InputUtil {
+
+ public List userNumber() {
+ System.out.print("μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : ");
+ String input = Console.readLine();
+ // μμΈ μ²λ¦¬ λ©μλ λ§λ€κΈ°....
+
+ List userNum = new ArrayList<>();
+ for(String number: input.split("")){
+ userNum.add(Integer.parseInt(number));
+ }
+ return userNum;
+ }
+
+ public boolean replay(){
+ System.out.println("κ²μμ μλ‘ μμνλ €λ©΄ 1, μ’
λ£νλ €λ©΄ 2λ₯Ό μ
λ ₯νμΈμ.");
+ String input = Console.readLine();
+ char answer = input.charAt(0);
+ if(answer == '1'){
+ return true;
+ }
+ return false;
+ }
+
+}