From 351e2912f4f0ae67616eb08e12205cae2ed8188b Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 11 Apr 2024 00:28:37 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[feat]:=20=EC=A7=9D=20=EB=BD=91=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=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 | 80 ++++++++++++++++++- 1 file changed, 77 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..2f0dbd3 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -6,33 +6,107 @@ public class LeetsMateApplication { // 동작 함수입니다. public void run() { + System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + Scanner sc = new Scanner(System.in); + String input = sc.nextLine(); + checkHasNoEnglish(input); + List memberList = parseMembers(input); + System.out.println("최대 짝 수를 입력해 주세요."); + int maxNum = Integer.parseInt(sc.nextLine()); + checkDataValidity(memberList.size(), maxNum); + String flag ="true"; + while (flag.equals("true") || flag.equals("exception")) { + if (!flag.equals("exception")) { + printResult(generateRandomGroups(memberList,maxNum)); + } + flag = isContinue(); + } } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + List memberList = new ArrayList<>(); + for (String s : members.split(",")) { + memberList.add(s); + } + return memberList; } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) { + try { + for (char c : members.toCharArray()) { + if (!(c >= '가' && c <= '힣') && !(Character.toString(c).equals(","))) { + throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); + } + } + } catch (Exception e) { + System.out.println(e.getMessage()); + run(); + } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 public void checkDataValidity(int memberCount, int maximumGroupSize) { + try { + if (memberCount < maximumGroupSize) { + throw new Exception("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + run(); + } } // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + List> newMemberList = new ArrayList<>(); + List newList = new ArrayList<>(); + for (String s : memberList) { + newList.add(s); + if (newList.size() == maximumGroupSize || memberList.indexOf(s) == memberList.size()-1) { + newMemberList.add(new ArrayList<>(newList)); + newList.clear(); + } + } + return newMemberList; } // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { + System.out.println("오늘의 짝 추천 결과입니다."); + for (List line : result) { + StringBuilder sb = new StringBuilder(); + sb.append("[ "); + for (String s : line) { + sb.append(s).append(" | "); + } + sb.replace(sb.length()-2,sb.length(),"]"); + System.out.println(sb); + } + System.out.println("추천을 완료했습니다."); + } + + public static String isContinue() { + System.out.print("다시 구성하시겠습니까? (y or n): "); + Scanner sc = new Scanner(System.in); + String q = sc.nextLine(); + if (q.equals("n")) { + System.out.println("자리를 이동해 서로에게 인사해주세요."); + return "false"; + } else if (q.equals("y")) { + System.out.println("--------------------------------"); + return "true"; + } else { + System.out.println("[ERROR] y 혹은 n만 입력해주세요."); + return "exception"; + } } public static void main(String[] args) { From 4031fdc5e0430b0bdaec7555277871be150fbc2d Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 11 Apr 2024 15:23:33 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[refactor]:=20=EB=A9=A4=EB=B2=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B3=80=EC=88=98=20=EB=AA=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 2f0dbd3..b878d27 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -8,9 +8,9 @@ public class LeetsMateApplication { public void run() { System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); Scanner sc = new Scanner(System.in); - String input = sc.nextLine(); - checkHasNoEnglish(input); - List memberList = parseMembers(input); + String memberInput = sc.nextLine(); + checkHasNoEnglish(memberInput); + List memberList = parseMembers(memberInput); System.out.println("최대 짝 수를 입력해 주세요."); int maxNum = Integer.parseInt(sc.nextLine()); checkDataValidity(memberList.size(), maxNum); From 198ce44e56582f6ccb521a0b2f8d3dc5a254d73d Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 11 Apr 2024 15:39:31 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[refactor]:=20=EB=8B=A4=EC=8B=9C=20?= =?UTF-8?q?=EB=BD=91=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -다시 뽑기를 위한 while 문의 flag 변수 타입을 Boolean으로 변경 -flag 변수의 이름을 isDone으로 수정 -isContinue의 반환값을 Boolean으로 수정 --- .../leets_mate/LeetsMateApplication.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index b878d27..f8bed88 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -14,12 +14,10 @@ public void run() { System.out.println("최대 짝 수를 입력해 주세요."); int maxNum = Integer.parseInt(sc.nextLine()); checkDataValidity(memberList.size(), maxNum); - String flag ="true"; - while (flag.equals("true") || flag.equals("exception")) { - if (!flag.equals("exception")) { - printResult(generateRandomGroups(memberList,maxNum)); - } - flag = isContinue(); + Boolean isDone = true; + while (isDone .equals(true)) { + printResult(generateRandomGroups(memberList,maxNum)); + isDone = isContinue(); } } @@ -93,19 +91,23 @@ public void printResult(List> result) { System.out.println("추천을 완료했습니다."); } - public static String isContinue() { + public static Boolean isContinue() { System.out.print("다시 구성하시겠습니까? (y or n): "); - Scanner sc = new Scanner(System.in); - String q = sc.nextLine(); - if (q.equals("n")) { - System.out.println("자리를 이동해 서로에게 인사해주세요."); - return "false"; - } else if (q.equals("y")) { - System.out.println("--------------------------------"); - return "true"; - } else { - System.out.println("[ERROR] y 혹은 n만 입력해주세요."); - return "exception"; + try { + Scanner sc = new Scanner(System.in); + String continueFlag = sc.nextLine(); + if (continueFlag.equals("n")) { + System.out.println("자리를 이동해 서로에게 인사해주세요."); + return false; + } else if (continueFlag.equals("y")) { + System.out.println("--------------------------------"); + return true; + } else { + throw new IllegalArgumentException("[ERROR] y 혹은 n만 입력해주세요."); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + return isContinue(); } } From 99dcf4198ad56216407254a22384257364a94544 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 11 Apr 2024 15:45:18 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[refactor]:=20=EB=A9=A4=EB=B2=84=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B6=84=EB=A6=AC=20=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=95=A8=EC=88=98=20=EC=88=98=EC=A0=95=20-for?= =?UTF-8?q?=EB=AC=B8=20=EB=8C=80=EC=8B=A0=20asList=EB=A5=BC=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EB=A9=A4=EB=B2=84=EB=A5=BC=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index f8bed88..53a3ff1 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -23,11 +23,7 @@ public void run() { // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - List memberList = new ArrayList<>(); - for (String s : members.split(",")) { - memberList.add(s); - } - return memberList; + return Arrays.asList(members.split(",")); } // 총 멤버수를 반환합니다.