From 59c2af13905a9e82688690f892f10b531b021bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=EC=95=A0?= Date: Wed, 10 Apr 2024 15:40:51 +0900 Subject: [PATCH 1/2] =?UTF-8?q?mission1:=201=EC=B0=A8=20=EC=A0=9C=EC=B6=9C?= =?UTF-8?q?=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 84 ++++++++++++++++++- .../leets_mate/LeetsMateApplicationTests.java | 7 ++ 2 files changed, 88 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..73f8b8c 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -1,38 +1,116 @@ package leets.leets_mate; import java.util.*; +import java.io.*; public class LeetsMateApplication { // 동작 함수입니다. public void run() { + Scanner sc = new Scanner(System.in); + String members = sc.nextLine(); + int ret = 1; + + // 영어 없는지 확인 + checkHasNoEnglish(members); + + // 리스트로 멤버 분리 + List memArray = parseMembers(members); + + // 멤버 명수 확인 + int memberCount = memberNumber(memArray); + // 이름 개수보다 짝 수가 더 많으면 예외발생 + int maximumGroupSize = Integer.parseInt(sc.nextLine()); + checkDataValidity(memberCount, maximumGroupSize); + + + // 다시 생성을 진행할지 묻는 함수 + + while (ret == 1){ + // 랜덤 짝궁 추천 + printResult(generateRandomGroups(memArray, maximumGroupSize)); + + System.out.print("다시 구성하시겠습니까? (y or n): "); + String re = sc.nextLine(); + System.out.println("--------------------------------"); + ret = reGeneration(re); + + if(ret != 1) break; + } + + sc.close(); } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + // 저장할 리스트 + List memArray = new ArrayList(); + + // ,를 기준으로 문자열 분리 + StringTokenizer st = new StringTokenizer(members, ","); + + // 문자열 리스트에 저장 + while(st.hasMoreTokens()) + memArray.add(st.nextToken()); + + return memArray; } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) { + if (!members.matches("[가-힣,]+")) { + throw new IllegalArgumentException("[ERROR] 이름은 한글로 입력해야 합니다"); + } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 public void checkDataValidity(int memberCount, int maximumGroupSize) { + if (memberCount < maximumGroupSize) { + throw new IllegalArgumentException("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + } } // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + List> groups = new ArrayList<>(); + for (int i = 0; i < memberList.size(); i += maximumGroupSize) { + groups.add(new ArrayList<>(memberList.subList(i, Math.min(i + maximumGroupSize, memberList.size())))); + } + return groups; } // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { + System.out.println("오늘의 짝 추천 결과입니다."); + for (List group : result) { + System.out.print("[ "); + for (int i = 0; i < group.size(); i++) { + System.out.print(group.get(i)); + if (i < group.size() - 1) { + System.out.print(" | "); + } + } + System.out.println(" ]"); + } + System.out.println("추천을 완료했습니다."); + } + + // 다시 추첨을 진행하는 함수입니다. + public int reGeneration(String re) { + if(Objects.equals(re, "n")) { + System.out.println("자리를 이동해 서로에게 인사해주세요."); + return 0; + } else if (Objects.equals(re, "y")) { + return 1; + } else { + throw new IllegalArgumentException("[ERROR] y또는 n을 입력해야 합니다"); + } } public static void main(String[] args) { diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index 706e295..72666e4 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -44,4 +44,11 @@ void setUp() { app.checkHasNoEnglish("welcome,to,leets"); }); } + + @Test + void 다시_추천받을때_n또는_y를_입력한다() { + assertThrows(Exception.class, () -> { + app.reGeneration("no"); + }); + } } \ No newline at end of file From a813dc6dfd106b3c387b6e31d840966e57247a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=EC=95=A0?= Date: Thu, 11 Apr 2024 14:48:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20print=EB=AC=B8=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=20Object.equals=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 73f8b8c..3095763 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -7,9 +7,12 @@ public class LeetsMateApplication { // 동작 함수입니다. public void run() { - Scanner sc = new Scanner(System.in); - String members = sc.nextLine(); - int ret = 1; + Scanner input = new Scanner(System.in); // Scanner 클래스 생성 + int ret = 1; // loop 돌리기 위한 변수 설정 + + // 멤버 이름 입력 + System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + String members = input.nextLine(); // 영어 없는지 확인 checkHasNoEnglish(members); @@ -19,8 +22,10 @@ public void run() { // 멤버 명수 확인 int memberCount = memberNumber(memArray); + // 이름 개수보다 짝 수가 더 많으면 예외발생 - int maximumGroupSize = Integer.parseInt(sc.nextLine()); + System.out.println("\n"+"최대 짝 수를 입력해 주세요."); + int maximumGroupSize = Integer.parseInt(input.nextLine()); checkDataValidity(memberCount, maximumGroupSize); @@ -30,15 +35,15 @@ public void run() { // 랜덤 짝궁 추천 printResult(generateRandomGroups(memArray, maximumGroupSize)); - System.out.print("다시 구성하시겠습니까? (y or n): "); - String re = sc.nextLine(); + System.out.print("\n"+"다시 구성하시겠습니까? (y or n): "); + String re = input.nextLine(); System.out.println("--------------------------------"); ret = reGeneration(re); if(ret != 1) break; } - sc.close(); + input.close(); } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. @@ -87,7 +92,7 @@ public List> generateRandomGroups(List memberList, int maxi // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { - System.out.println("오늘의 짝 추천 결과입니다."); + System.out.println("\n"+"오늘의 짝 추천 결과입니다."); for (List group : result) { System.out.print("[ "); for (int i = 0; i < group.size(); i++) { @@ -98,15 +103,15 @@ public void printResult(List> result) { } System.out.println(" ]"); } - System.out.println("추천을 완료했습니다."); + System.out.println("\n"+"추천을 완료했습니다."); } // 다시 추첨을 진행하는 함수입니다. public int reGeneration(String re) { - if(Objects.equals(re, "n")) { + if(re.equals("n")) { System.out.println("자리를 이동해 서로에게 인사해주세요."); return 0; - } else if (Objects.equals(re, "y")) { + } else if (re.equals("y")) { return 1; } else { throw new IllegalArgumentException("[ERROR] y또는 n을 입력해야 합니다");