From 47a872835e560952adcf02918906ba9600f419c0 Mon Sep 17 00:00:00 2001 From: jiixon Date: Tue, 9 Apr 2024 18:19:32 +0900 Subject: [PATCH 1/8] =?UTF-8?q?:sparkles:[feat]:=20run()=ED=95=A8=EC=88=98?= =?UTF-8?q?=20=EB=B0=8F=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..49361f4 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -3,9 +3,29 @@ import java.util.*; public class LeetsMateApplication { + static String members; + static List memberList; // 동작 함수입니다. - public void run() { + public void run() throws Exception { + Scanner sc = new Scanner(System.in); + + System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); + System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + members = sc.nextLine(); + + checkHasNoEnglish(members); + + System.out.println(); + + System.out.println("최대 짝 수를 입력해 주세요."); + int max = sc.nextInt(); + + memberList = parseMembers(members); + + System.out.println("오늘의 짝 추천 결과입니다.\n"); + + } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. @@ -19,7 +39,7 @@ public int memberNumber(List members) { } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) { + public void checkHasNoEnglish(String members) throws Exception { } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 @@ -35,7 +55,7 @@ public List> generateRandomGroups(List memberList, int maxi public void printResult(List> result) { } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { LeetsMateApplication app = new LeetsMateApplication(); app.run(); } From 87c7207a21f4554b4b06e631c8a29b72a2f57e5d Mon Sep 17 00:00:00 2001 From: jiixon Date: Tue, 9 Apr 2024 18:20:31 +0900 Subject: [PATCH 2/8] =?UTF-8?q?:sparkles:[feat]:parseMembers=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 49361f4..b6470b7 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -30,7 +30,7 @@ public void run() throws Exception { // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + return List.of(members.split(",")); } // 총 멤버수를 반환합니다. From 3e6eb85fc634871dfa29f9a042a4db2aa46fa9ff Mon Sep 17 00:00:00 2001 From: jiixon Date: Tue, 9 Apr 2024 18:21:36 +0900 Subject: [PATCH 3/8] =?UTF-8?q?:sparkles:[feat]:=20checkHasNoEnglish=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index b6470b7..acc6a5f 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -40,6 +40,9 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) throws Exception { + if(members.matches(".*[a-zA-Z].*")){ + throw new Exception ("[ERROR] 이름은 한글로 입력해야 합니다"); + } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 From e229e580e60e0f3fc7f5bcf12a6d4f75e6899493 Mon Sep 17 00:00:00 2001 From: jiixon Date: Tue, 9 Apr 2024 19:15:07 +0900 Subject: [PATCH 4/8] =?UTF-8?q?:sparkles:[feat]:=20checkDataValidity=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/leets_mate/LeetsMateApplication.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index acc6a5f..489fe1b 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -15,13 +15,16 @@ public void run() throws Exception { members = sc.nextLine(); checkHasNoEnglish(members); - + memberList = parseMembers(members); System.out.println(); - System.out.println("최대 짝 수를 입력해 주세요."); - int max = sc.nextInt(); + int maximumGroupSize = sc.nextInt(); + int memberCount = memberList.size(); + + checkDataValidity(memberCount, maximumGroupSize); + + generateRandomGroups(memberList, maximumGroupSize); - memberList = parseMembers(members); System.out.println("오늘의 짝 추천 결과입니다.\n"); @@ -46,7 +49,10 @@ public void checkHasNoEnglish(String members) throws Exception { } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 - public void checkDataValidity(int memberCount, int maximumGroupSize) { + public void checkDataValidity(int memberCount, int maximumGroupSize) throws Exception { + if(maximumGroupSize>memberCount){ + throw new Exception("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + } } // 랜덤 짝꿍 추첨하는 함수 입니다. From fce392704d30d1d169feb67b0d167b525b078853 Mon Sep 17 00:00:00 2001 From: jiixon Date: Tue, 9 Apr 2024 19:17:09 +0900 Subject: [PATCH 5/8] =?UTF-8?q?:sparkles:[feat]:=20memberNumber=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=ED=95=B4=EC=84=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leets/leets_mate/LeetsMateApplication.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 489fe1b..c935de1 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -5,6 +5,8 @@ public class LeetsMateApplication { static String members; static List memberList; + static int maximumGroupSize; + static int memberCount; // 동작 함수입니다. public void run() throws Exception { @@ -18,8 +20,10 @@ public void run() throws Exception { memberList = parseMembers(members); System.out.println(); System.out.println("최대 짝 수를 입력해 주세요."); - int maximumGroupSize = sc.nextInt(); - int memberCount = memberList.size(); + + + maximumGroupSize = sc.nextInt(); + memberCount = memberNumber(memberList); checkDataValidity(memberCount, maximumGroupSize); @@ -38,7 +42,7 @@ public List parseMembers(String members) { // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 From c2397969acec7570ad1c0dce0f6ebed0ccde9107 Mon Sep 17 00:00:00 2001 From: jiixon Date: Thu, 11 Apr 2024 17:44:12 +0900 Subject: [PATCH 6/8] =?UTF-8?q?:sparkles:[feat]:=20generateRandomGroups,?= =?UTF-8?q?=20printResult=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 90 +++++++++++++++---- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index c935de1..a1f46cf 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -3,10 +3,6 @@ import java.util.*; public class LeetsMateApplication { - static String members; - static List memberList; - static int maximumGroupSize; - static int memberCount; // 동작 함수입니다. public void run() throws Exception { @@ -14,30 +10,43 @@ public void run() throws Exception { System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); - members = sc.nextLine(); + String members = sc.nextLine(); checkHasNoEnglish(members); - memberList = parseMembers(members); + List memberList = parseMembers(members); System.out.println(); System.out.println("최대 짝 수를 입력해 주세요."); - maximumGroupSize = sc.nextInt(); - memberCount = memberNumber(memberList); + int maximumGroupSize = Integer.parseInt(sc.nextLine()); + int memberCount = memberNumber(memberList); checkDataValidity(memberCount, maximumGroupSize); - generateRandomGroups(memberList, maximumGroupSize); + List> lists = generateRandomGroups(memberList, maximumGroupSize); - - System.out.println("오늘의 짝 추천 결과입니다.\n"); + System.out.println(); + System.out.println("오늘의 짝 추천 결과입니다."); + printResult(lists); + + System.out.println("\n추첨을 완료하였습니다."); + + while (askForRestart(sc)) { + System.out.println("--------------------------------"); + lists = generateRandomGroups(memberList, maximumGroupSize); + System.out.println(); + System.out.println("오늘의 짝 추천 결과입니다."); + printResult(lists); + System.out.println("\n추첨을 완료하였습니다."); + } + sc.close(); } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return List.of(members.split(",")); + return Arrays.asList(members.split(",")); } // 총 멤버수를 반환합니다. @@ -47,25 +56,74 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) throws Exception { - if(members.matches(".*[a-zA-Z].*")){ - throw new Exception ("[ERROR] 이름은 한글로 입력해야 합니다"); + if (members.matches(".*[a-zA-Z].*")) { + throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 public void checkDataValidity(int memberCount, int maximumGroupSize) throws Exception { - if(maximumGroupSize>memberCount){ + if (maximumGroupSize > memberCount) { throw new Exception("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); } } // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + + List> resultList = new ArrayList<>(); + + int colum = maximumGroupSize; //4 + int row; //2 + + if (memberList.size() % maximumGroupSize == 0) { + row = memberList.size() / maximumGroupSize; + } else { + row = memberList.size() / maximumGroupSize + 1; + } + + + for (int i = 0; i < row; i++) { + resultList.add(new ArrayList<>()); + } + + for (int i = 0; i < row; i++) { + for (int j = i*colum; j < colum*(i+1); j++) { + if(j> result) { + StringBuilder sb = new StringBuilder(); + + for(int i=0; i Date: Thu, 11 Apr 2024 18:28:16 +0900 Subject: [PATCH 7/8] =?UTF-8?q?:sparkles:[feat]:=20InputException=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/leets_mate/exception/InvalidInputException.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/leets/leets_mate/exception/InvalidInputException.java diff --git a/src/main/java/leets/leets_mate/exception/InvalidInputException.java b/src/main/java/leets/leets_mate/exception/InvalidInputException.java new file mode 100644 index 0000000..8f1ea2c --- /dev/null +++ b/src/main/java/leets/leets_mate/exception/InvalidInputException.java @@ -0,0 +1,8 @@ +package leets.leets_mate.exception; + +public class InvalidInputException extends RuntimeException{ + public InvalidInputException(String message) { + super(message); + } + +} From d0011aec27e3c3c30dd27c2abf0b1134854927e2 Mon Sep 17 00:00:00 2001 From: jiixon Date: Thu, 11 Apr 2024 18:29:18 +0900 Subject: [PATCH 8/8] =?UTF-8?q?:recycle:[refactor]:=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 86 +++++++++---------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index a1f46cf..95fcce2 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -1,102 +1,90 @@ package leets.leets_mate; +import leets.leets_mate.exception.InvalidInputException; + import java.util.*; public class LeetsMateApplication { + private static final String START_MESSAGE = "[Leets 오늘의 짝에게]를 시작합니다.\n"; + private static final String GOODBYE_MESSAGE = "추첨을 완료하였습니다.\n자리를 이동해 서로에게 인사해주세요."; + - // 동작 함수입니다. - public void run() throws Exception { + public void run(){ Scanner sc = new Scanner(System.in); - System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); + System.out.println(START_MESSAGE); System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); String members = sc.nextLine(); checkHasNoEnglish(members); List memberList = parseMembers(members); - System.out.println(); - System.out.println("최대 짝 수를 입력해 주세요."); + + int maximumGroupSize = getMaximumGroupSize(sc); - int maximumGroupSize = Integer.parseInt(sc.nextLine()); int memberCount = memberNumber(memberList); checkDataValidity(memberCount, maximumGroupSize); - List> lists = generateRandomGroups(memberList, maximumGroupSize); - - System.out.println(); - System.out.println("오늘의 짝 추천 결과입니다."); - printResult(lists); - - System.out.println("\n추첨을 완료하였습니다."); - + printResultAndMessage(memberList, maximumGroupSize); while (askForRestart(sc)) { System.out.println("--------------------------------"); - lists = generateRandomGroups(memberList, maximumGroupSize); - System.out.println(); - System.out.println("오늘의 짝 추천 결과입니다."); - printResult(lists); - System.out.println("\n추첨을 완료하였습니다."); + printResultAndMessage(memberList, maximumGroupSize); } sc.close(); - - } - // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { return Arrays.asList(members.split(",")); } - - // 총 멤버수를 반환합니다. + private int getMaximumGroupSize(Scanner sc) { + System.out.println("\n최대 짝 수를 입력해 주세요."); + int maximumGroupSize = Integer.parseInt(sc.nextLine()); + if (maximumGroupSize <= 0) { + throw new InvalidInputException("[ERROR] 최대 짝 수는 0보다 커야 합니다"); + } + return maximumGroupSize; + } public int memberNumber(List members) { return members.size(); } - // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) throws Exception { + public void checkHasNoEnglish(String members){ if (members.matches(".*[a-zA-Z].*")) { - throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); + throw new InvalidInputException("[ERROR] 이름은 한글로 입력해야 합니다"); + } + if (members.isEmpty()) { + throw new InvalidInputException("[ERROR] 멤버의 이름을 입력해 주세요"); } } - // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 - public void checkDataValidity(int memberCount, int maximumGroupSize) throws Exception { + public void checkDataValidity(int memberCount, int maximumGroupSize){ + if (maximumGroupSize <= 0) { + throw new InvalidInputException("[ERROR] 최대 짝 수는 0보다 커야 합니다"); + } if (maximumGroupSize > memberCount) { - throw new Exception("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + throw new InvalidInputException("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); } } - // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { Collections.shuffle(memberList); List> resultList = new ArrayList<>(); - int colum = maximumGroupSize; //4 - int row; //2 - - if (memberList.size() % maximumGroupSize == 0) { - row = memberList.size() / maximumGroupSize; - } else { - row = memberList.size() / maximumGroupSize + 1; - } + int column = maximumGroupSize; + int row = (memberList.size() + column - 1) / column; for (int i = 0; i < row; i++) { resultList.add(new ArrayList<>()); - } - - for (int i = 0; i < row; i++) { - for (int j = i*colum; j < colum*(i+1); j++) { + for (int j = i*column; j < column*(i+1); j++) { if(j> result) { StringBuilder sb = new StringBuilder(); @@ -111,17 +99,23 @@ public void printResult(List> result) { } System.out.println(sb); } + public void printResultAndMessage(List memberList, int maximumGroupSize) { + List> lists = generateRandomGroups(memberList, maximumGroupSize); + System.out.println("\n오늘의 짝 추천 결과입니다."); + printResult(lists); + System.out.println(GOODBYE_MESSAGE); + } public boolean askForRestart(Scanner sc) { while (true) { System.out.print("다시 구성하시겠습니까? (y or n): "); - String retry = sc.nextLine(); + String retry = sc.nextLine().trim().toLowerCase(); if (retry.equals("n")) { System.out.println("자리를 이동해 서로에게 인사해주세요."); return false; } else if (retry.equals("y")) { return true; } else { - System.out.println("잘못된 입력입니다. 다시 시도해주세요."); + throw new InvalidInputException("[ERROR] 잘못된 입력입니다. 'y' 또는 'n'을 입력해주세요."); } } }